注释“xy”与模型上的字段冲突 - django

don*_*yor 7 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_name="tc_books")

class Journal(models.Model):
  name = models.TextField()
  tc = models.ForeignKey(Topiccenter,related_name="tc_journals")
Run Code Online (Sandbox Code Playgroud)

我正在尝试做这样的事情:

Topiccenter.objects.annotate(tc_books=Sum('tc_books'),
                              journals=Sum('tc_journals')
                              ).extra(
                                   select={'sum_entries':'tc_books+journals'}, 
                                   order_by=('sum_entries',)
                              )
Run Code Online (Sandbox Code Playgroud)

但它是说:The annotation 'tc_books' conflicts with a field on the model.

knb*_*nbk 9

问题是这tc_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',)
                             )
Run Code Online (Sandbox Code Playgroud)