假设我的model s.py中有这样的内容:

class Hipster(models.Model):
  name = CharField(max_length=50)

class Party(models.Model):
  organiser = models.ForeignKey()
  participants = models.ManyToManyField(Profile, related_name="participants")

现在,在我的views.py中,我想执行一个查询,该查询将为参与者超过0的用户获取一个聚会.

大概是这样的:

user = Hipster.get(pk=1) 
hip_parties = Party.objects.filter(organiser=user, len(participants) > 0)

做这件事最好的方法是什么?

推荐答案

如果这样行得通,我就会这么做.

最好的方式可以意味着很多事情:最佳的性能、最好的可维护性等等.因此,我不会说这是最好的方式,但是我喜欢尽可能地坚持ORM的特性,因为它看起来更易维护.

from django.db.models import Count

user = Hipster.objects.get(pk=1) 
hip_parties = (Party.objects.annotate(num_participants=Count('participants'))
                            .filter(organiser=user, num_participants__gt=0))

Django相关问答推荐

社工/社工简戈

Django REST序列化程序TO_REATION失败

如何在 Django 中设置与 Session 相关的字段

Django多对多关系报错:<title> object (None)>需要先设置id字段的值.

从url参数过滤的Django日期范围返回空查询集

如果字段为空,则 Unique_together 不起作用.怎么约束呢?

Django 关系嵌套related_name

如何在 Django 模型中存储元组列表

断开连接不会发生

AttributeError:模块rest_framework.serializers在 Swagger 中的 Django 中没有属性NullBooleanField

包含资源时,DRF 返回我的软删除记录

Django `UniqueConstraint` 异常处理方式与 'unique=True' 相同

用于测试文件下载的 Django 单元测试

如何在终端中切换 Python 版本?

Django - 如何从模型实例中获取管理员 URL

django-object-permissions Vs django-guardian Vs django-authority

Django 自定义用户邮箱帐户验证

将 jQuery 脚本添加到 Django 管理界面

Django模板过滤器(filters)、标签(tags)、simple_tags和inclusion_tags

将 AND 和 OR 与 Q 对象组合的 Django 查询过滤器不返回预期结果