В настоящее время у меня есть свойства NumWishes и NumPost внутри моей модели учебника. Однако эти свойства возвращают только счет для текущего учебника. Я хотел бы, чтобы свойство возвращало счет для всех учебников с текущим учебником isbn. Это не работает в настоящее время, потому что у меня есть unique_together = ('isbn', 'class_name')
в модели.Django Model Property - подсчет внешнего ключа для нескольких экземпляров модели
Например, если у меня есть 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'
Спасибо :)
Итак, для каждой книги вы хотите подсчитать, сколько книг в общей сложности с этим ISBN появится в каждом списке пожеланий и каждой публикации? –
Возможно, вы захотите нормализовать свои модели немного больше. В этом случае я бы также включил модель для класса (возможно, не назвал ее). Со многими отношениями к учебнику. – kevswanberg
@ TimmyO'Mahony Каждый учебник должен подсчитывать количество сообщений и пожеланий с помощью isbn, да. – Programmingjoe