python - Django 模型属性 - 计算模型多个实例的外键数量

标签 python django django-models

目前,我的 Textbook 模型中有 NumWishes 和 NumPosts 属性。但是,这些属性仅返回当前教科书的计数。我希望属性返回当前教科书 isbn 的所有教科书的计数。目前这不起作用,因为我的模型中有 unique_together = ('isbn', 'class_name')

例如,如果我有 3 本具有相同 isbn 但有 3 个不同类别的教科书,则该属性将为每个教科书返回 1。但是,我希望该属性为每本教科书返回 3。

教科书模型

class Textbook(models.Model):
    textbook_name = models.CharField(max_length=200)
    class_name = models.CharField(max_length=200)
    author = models.CharField(max_length=200)
    isbn = models.CharField(max_length=200)
    semester = models.CharField(max_length=200, default="FALL2015")

# Properties for determing supply and demand
    @property
    def NumWishes(self):
        return self.wishlist_set.count()

    @property
    def NumPosts(self):
        return self.posting_set.count()

    @property
    def DemSup(self):
        if (self.posting_set.count() != 0):
            showmethemoney = float((self.wishlist_set.count()))/(self.posting_set.count())
        else:
            showmethemoney = 0
            return showmethemoney

# Instead of a pk field isbn and class_name together have to be unique
    class Meta:
        unique_together = ('isbn', 'class_name')

    def __str__(self):
        return self.textbook_name

我的发帖模型如下。愿望 list 模型与发布模型非常相似。

发布模型

class Posting(models.Model):
    textbook = models.ForeignKey(Textbook)
    condition = models.CharField(max_length=200)
    price = models.DecimalField(max_digits=5, decimal_places=2)
    user = models.ForeignKey(User)
    image = models.ImageField(upload_to='postingpics/%Y/%m/%d', default="/textchange/nophoto.png")
    post_date = models.DateTimeField('date_posted')
    comments = models.CharField(max_length=50, default="")

    def __str__(self):
        return str(self.textbook)

    def was_posted_recently(self):
        return self.post_date >= timezone.now() - datetime.timedelta(days=1)
    was_posted_recently.admin_order_field = 'post_date'
    was_posted_recently.boolean = True
    was_posted_recently.short_description = 'Posted recently'

谢谢:)

最佳答案

如果我在评论中写的是真的,你可以这样做:

@property
def NumPosts(self):
    return Posting.objects.filter(textbook__isbn=self.isbn).count()

但是如果您在循环中使用该属性,这将非常低效。

关于python - Django 模型属性 - 计算模型多个实例的外键数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35348009/

相关文章:

python __getattr__ 帮助

python - tkinter:如何让用户在 asksaveasfilename 对话框中选择文件类型?

python - Python MD5、SHA512 (+salt) 加密的问题

python - 在 python 中保存来自 JSON 数据的许多文件文本

Django 管理员 : show records for respective user only

django - Django中的自定义纬度/经度表单字段

django - 属性错误: 'AlumniResponseFormFormSet' object has no attribute 'new_objects'

python - 安全的 Django 文件权限

django - 如何在 Django 中为用户批量 'reassign' 所有外键

python - 嵌套序列化器中的 Django Rest Framework 关系查询