Python 注释';xy';与模型上的字段冲突-django
我有模型:Python 注释';xy';与模型上的字段冲突-django,python,django,django-models,Python,Django,Django Models,我有模型: class Topiccenter(models.Model): name = models.TextField() def sumentries(self): return self.tc_books.count() + self.tc_journals.count() class Book(models.Model): name = models.TextField() tc = models.ForeignKey(Topiccenter,related
class Topiccenter(models.Model):
name = models.TextField()
def sumentries(self):
return self.tc_books.count() + self.tc_journals.count()
class Book(models.Model):
name = models.TextField()
tc = models.ForeignKey(Topiccenter,related_name="tc_books")
class Journal(models.Model):
name = models.TextField()
tc = models.ForeignKey(Topiccenter,related_name="tc_journals")
我正在尝试这样做:
更新Topiccenter.objects.annotate(tc_books=Sum('tc_books'),
日记账=总和(“tc\U日记账”)
).额外的(
选择={'sum_entries':'tc_books+journals'},
order_by=('sum_entries',)
)
但是它是这样说的:注释“tc\u books”与模型上的一个字段冲突。
这样如何:
topics = Topiccenter.objects.all()
topics_by_count = []
for topic in topics:
books = topic.book_set.count()
journals = topic.journal_set.count()
print('Number of books: {}'.format(books))
print('Number of journals: {}'.format(journals))
print('Total Entries: {}'.format(books+journals))
topics_by_count.append((books+journals, topic,))
topics_sorted = sorted(topics_by_entries, key=lambda x: x[0], reverse=True)
for count, topic in topics_sorted:
print('{}: {}'.format(topic, count))
问题是
tc\u books
也是您的书籍的相关名称。此外,您还试图对非数值使用Sum
。您应该改为使用Count
。试试这个:
Topiccenter.objects.annotate(num_books=Count('tc_books'),
num_journals=Count('tc_journals')
).extra(
select={'sum_entries':'num_books+num_journals'},
order_by=('sum_entries',)
)
谢谢较短的方法是
books=Sum('tc_books')
,但这样说是行不通的:列»books«不存在
。你知道为什么吗?你需要使用相关的名称,所以books
应该是tc\u books
等等。现在它说:注释“tc\u books”与模型上的一个字段冲突。
你正在运行的确切查询是什么?请注意,如果没有prefetch\u related('book\u set',journal\u set')
,这将对每个topiccenter使用2个数据库查询。即使是与预取相关的,它也将执行3个查询,其中只需要1个查询。