使用 Q 的 Django 查询
Django Queries using Q
我有以下
项目模型:
class Project(models.Model):
creator = models.ForeignKeyField(settings.AUTH_USER_MODEL)
name = models.CharField(max_lenght=200)
co_workers = models.ManyToManyField(settings.AUTH_USER_MODEL)
table 用户:
id_user username
1 Frank
2 Steve
3 Eddie
table 个项目:
id_project project_name id_creator
1 project 1 1
2 project 2 1
3 project 3 1
4 project 4 1
table projects_users(m2m) 这个 table 是给同一个项目的另一个工人:
id_user id_project
2 1
3 1
2 2
3 2
当我进行以下查询时,我得到:
>>>Project.objects.filter(creator=1)
[project 1, project 2, project 3, project 4]
>>>Project.objects.filter(co_workers=1)
[]
这很好,但是当我输入时:
>>>Project.objects.filter(Q(co_workers=1)| Q(creator=1))
[Project 1, Project 1, Project 2, Project 2, Project 3, Project 4]
我期待得到:
[项目1、项目2、项目3、项目4]
我做错了什么?
你得到 Project 1
和 Project 2
两次的原因是你的 or
条件仍然可以正确地评估任一查询。您需要在查询集末尾使用 distinct()
方法。
Project.objects.filter(Q(co_workers=1)| Q(creator=1)).distinct()
我有以下
项目模型:
class Project(models.Model):
creator = models.ForeignKeyField(settings.AUTH_USER_MODEL)
name = models.CharField(max_lenght=200)
co_workers = models.ManyToManyField(settings.AUTH_USER_MODEL)
table 用户:
id_user username
1 Frank
2 Steve
3 Eddie
table 个项目:
id_project project_name id_creator
1 project 1 1
2 project 2 1
3 project 3 1
4 project 4 1
table projects_users(m2m) 这个 table 是给同一个项目的另一个工人:
id_user id_project
2 1
3 1
2 2
3 2
当我进行以下查询时,我得到:
>>>Project.objects.filter(creator=1)
[project 1, project 2, project 3, project 4]
>>>Project.objects.filter(co_workers=1)
[]
这很好,但是当我输入时:
>>>Project.objects.filter(Q(co_workers=1)| Q(creator=1))
[Project 1, Project 1, Project 2, Project 2, Project 3, Project 4]
我期待得到:
[项目1、项目2、项目3、项目4]
我做错了什么?
你得到 Project 1
和 Project 2
两次的原因是你的 or
条件仍然可以正确地评估任一查询。您需要在查询集末尾使用 distinct()
方法。
Project.objects.filter(Q(co_workers=1)| Q(creator=1)).distinct()