Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 注释';xy';与模型上的字段冲突-django_Python_Django_Django Models - Fatal编程技术网

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个查询。