python - 注释 'xy'与模型上的字段冲突-django

标签 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")

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

更新
Topiccenter.objects.annotate(tc_books=Sum('tc_books'), journals=Sum('tc_journals') ).extra( select={'sum_entries':'tc_books+journals'}, order_by=('sum_entries',) )

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

最佳答案

问题是 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',)
                             )

关于python - 注释 'xy'与模型上的字段冲突-django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22588058/

相关文章:

python - Django 管理员自动保存

python - Gspread 将电子表格导出到带格式的文件系统

python - 使用 Django,在查询集中的每个对象上添加特定字段的最佳实践方法是什么?

python - 当函数具有不同数量的参数时,从列表中调用随机函数

python - 从 groupby 对象中过滤所有行

python - 使用线程和扭曲发送消息的高速公路

python - Django/makemigrations ModuleNotFoundError : No module named 'idmp_core.apps.IdmpCoreConfigdjango' ; 错误

python - 使用注释对相关字段进行 Django 过滤器

django - 将一些新属性/字段附加到 django rest 框架中的validated_data

Django ModelForm 验证