簡體   English   中英

Django模型屬性-計算模型的多個實例的外鍵

[英]Django Model Property - Count foreign key for multiple instances of model

目前,我的教科書模型中具有屬性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

我的發布模型如下。 願望清單模型與發布列表非常相似。

過帳模型

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()

但是如果在循環中使用該屬性,效率將非常低下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM