目前,我的教科书模型中有NumWishes和NumPosts属性。但是,这些属性仅返回当前教科书的计数。我希望该财产返回当前教科书isbn所有教科书的计数。目前这不起作用,因为我在模型中有unique_together = ('isbn', 'class_name')
。Django模型属性 - 为模型的多个实例计算外键
例如,如果我有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'
谢谢:)
因此,对于每本书,您想要统计每本心愿单和每个帖子上出现的总共有多少书籍? –
您可能想要更多地标准化模型。在这种情况下,我还会为Class添加一个模型(可能不会那样称呼它)。与教科书之间存在多对多的关系。 – kevswanberg
@ TimmyO'Mahony每本教科书都应该计算发布和愿望的数量,因为它是isbn,是的。 – Programmingjoe