一旦将字段变成Django中的属性,如何防止字段从模型中“删除”?

标清

我有一个属于属性的字段,因为它是所有评论的平均值:

ratings = models.FloatField(null=True, default=0)
@property
def ratings(self):
    return self.reviews.aggregate(avg_score=Avg('score'))['avg_score']

问题是,如果我这样做,则该字段“消失”。实际上,如果我运行makemigrations,它将删除该字段。问题是我使用了django-filter,并且希望可以选择按评分过滤(向我显示所有7到10之间的书)。如果将其设置为属性,则无法执行此操作,因为django-filter无法再“检测”该字段。

我有办法同时拥有财产和土地吗?我是否可以创建一个替代字段,使其在每次更改评级时都更新并使其等于该值?

威廉·范昂塞姆

好吧,您不能同时创建字段和属性。此外,我建议不要一开始就使用字段,因为这会导致数据重复:将数据以聚合形式保存在其他位置。事实证明,即使在同一数据库上,数据同步也比看起来要困难得多。

您可以使用annotate(..)[Django-doc]查询集,以便数据库将自动为其检索的每个项目计算聚合这样的查询集看起来像:

from django.db.models import Avg

MyModel.objects.annotate(
    ratings=Avg('reviews__score')
)

如果您经常需要此值,则可以在模型的Manager[Django-doc]中执行此操作:

class MyModelManager(models.Manager):

    def get_queryset(self):
        return super().get_queryset().annotate(
            ratings=Avg('reviews__score')
        )

class MyModel(models.Model):
    # … model without a ratings field
    objects = MyModelManager()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Django模型中,如何防止基于特定字段的删除?

来自分类Dev

一旦用户离开 FormBuilder 中的控件,如何进行表单字段验证

来自分类Dev

一旦其他输入字段填充至少 6 个字符,如何删除“禁用”属性

来自分类Dev

一旦将项目添加到阵列中,我就无法从阵列中删除项目

来自分类Dev

在Django中访问模型字段和属性

来自分类Dev

一旦用户单击提交,如何从表中删除行/永久禁用提交按钮

来自分类Dev

如何基于同一模型中其他字段的值设置Django模型字段值

来自分类常见问题

如何在Django模型字段中求和

来自分类Dev

如何在Django模型字段中求和

来自分类Dev

如何避免在Django模型字段中重复?

来自分类Dev

如何检查Django模型中的字段?

来自分类Dev

在模板中循环模型时,如何将唯一 id 字段从模型传递到 Django 表单?

来自分类Dev

如何将django模型字段值作为参数传递给callable,这是同一模型中字段的默认值?

来自分类Dev

一旦失去重点,文本字段就会刷新

来自分类Dev

jQuery:一旦字段为空,请重置类

来自分类Dev

Django模型中的DRY字段

来自分类Dev

在Django中强制模型字段

来自分类Dev

Django中的动态模型字段

来自分类Dev

Django模型中的字段分配

来自分类Dev

url中的django模型字段

来自分类Dev

我如何将两个字段的总和与Django中同一模型上的另一个字段进行比较

来自分类Dev

Django - 从模型中删除特定字段数据

来自分类Dev

一旦用户使用电子邮件验证了自己的身份,如何从MySQL数据库中删除用户

来自分类Dev

Django模型:删除字段

来自分类Dev

Django模型:删除字段

来自分类Dev

一旦找到匹配项,防止在jQuery中向下遍历

来自分类Dev

如何在Django模型表单中向字段添加类,ID,占位符属性

来自分类Dev

如何在Django中为继承的模型属性创建通用的modelform字段验证器?

来自分类Dev

如何在Django中为继承的模型属性创建通用的modelform字段验证器?

Related 相关文章

  1. 1

    在Django模型中,如何防止基于特定字段的删除?

  2. 2

    一旦用户离开 FormBuilder 中的控件,如何进行表单字段验证

  3. 3

    一旦其他输入字段填充至少 6 个字符,如何删除“禁用”属性

  4. 4

    一旦将项目添加到阵列中,我就无法从阵列中删除项目

  5. 5

    在Django中访问模型字段和属性

  6. 6

    一旦用户单击提交,如何从表中删除行/永久禁用提交按钮

  7. 7

    如何基于同一模型中其他字段的值设置Django模型字段值

  8. 8

    如何在Django模型字段中求和

  9. 9

    如何在Django模型字段中求和

  10. 10

    如何避免在Django模型字段中重复?

  11. 11

    如何检查Django模型中的字段?

  12. 12

    在模板中循环模型时,如何将唯一 id 字段从模型传递到 Django 表单?

  13. 13

    如何将django模型字段值作为参数传递给callable,这是同一模型中字段的默认值?

  14. 14

    一旦失去重点,文本字段就会刷新

  15. 15

    jQuery:一旦字段为空,请重置类

  16. 16

    Django模型中的DRY字段

  17. 17

    在Django中强制模型字段

  18. 18

    Django中的动态模型字段

  19. 19

    Django模型中的字段分配

  20. 20

    url中的django模型字段

  21. 21

    我如何将两个字段的总和与Django中同一模型上的另一个字段进行比较

  22. 22

    Django - 从模型中删除特定字段数据

  23. 23

    一旦用户使用电子邮件验证了自己的身份,如何从MySQL数据库中删除用户

  24. 24

    Django模型:删除字段

  25. 25

    Django模型:删除字段

  26. 26

    一旦找到匹配项,防止在jQuery中向下遍历

  27. 27

    如何在Django模型表单中向字段添加类,ID,占位符属性

  28. 28

    如何在Django中为继承的模型属性创建通用的modelform字段验证器?

  29. 29

    如何在Django中为继承的模型属性创建通用的modelform字段验证器?

热门标签

归档