我在使用Django ManyToManyField 过滤时出了些问题,我不能理解它。
我的目的是:想做一个任务单,这个任务单可以发布指派给一些人查看。
我遇到的问题:这个任务单在被指派人登陆中查看没有问题,但发布人查看会重复显示多条相同的数据。
#views
class TaskView(LoginRequiredMixin, View):
def get(self, request):
projecttask_all = ProjectTask.objects.filter(Q(owner=request.user.username) | Q(task_member=request.user))
print(projecttask_all)
# 使用owner登陆 print results
<QuerySet [<ProjectTask: user1>, <ProjectTask: user1>]>
// 我实际需要的是只输出<QuerySet [<ProjectTask: user1>]>,因为task_member中没有包含owner
# model
class ProjectTask(models.Model):
title = models.CharField(max_length=100, verbose_name='title', default='')
owner = models.CharField(max_length=30, verbose_name='owner')
task_member = models.ManyToManyField('UserProfile',related_name='task_member', blank=True, null=True)
# mysql
projecttask
| id | title | owner |
| -- | ----- | ----- |
| 1 | test | user1 |
projecttask_task_member
| id | projecttask_id | userprofile_id |
| -- | -------------- | -------------- |
| 1 | 1 | 8 |
| 2 | 1 | 9 |
我找到了答案,增加 .distinct()可以解决我的问题,我没有使用过应该需要花些时间去了解一下。
// .distinct()
projecttask_all = ProjectTask.objects.filter(Q(owner=request.user.username) | Q(task_member=request.user)).distinct()
厉害