django视图中的多模型过滤

Nei*_*man 1 django django-models

我正在尝试从特定模型中获取查询.我无法正确过滤数据.

我已经修复了一个错误,它返回了其他用户数据,但现在它返回了模型中一行数据的重复项.

events = Event.objects.filter(club=user.get_profile().main_club) | Event.objects.filter(invclub=user.get_profile().main_club) | Event.objects.filter(invited=user)
Run Code Online (Sandbox Code Playgroud)

这是我正在尝试执行的查询.

我的目标是,让用户手动邀请(邀请)他们的俱乐部被邀请(invclub)或他们的俱乐部是主办俱乐部(俱乐部)的所有活动

我可能正朝着错误的方向接近这个,并且可能更容易做到这一点.任何帮助是极大的赞赏.

编辑:comms.models

class Event(models.Model):
     title = models.CharField(max_length='255')
     club = models.ForeignKey(Club, verbose_name="Host Club")
     invclub = models.ManyToManyField(Club, verbose_name="Invited Clubs", related_name="Invited Clubs", blank=True)
     l_desc = models.CharField(max_length='255', verbose_name="Location Description")
     l_long = models.CharField(max_length='255', verbose_name="Longitude", blank=True)
     l_lat = models.CharField(max_length='255', verbose_name="Latitude", blank=True)
     edate = models.DateTimeField(default=datetime.now, verbose_name="Event Date", blank=True)
     length = models.CharField(max_length='255', verbose_name="Event Length", blank=True)
     invited = models.ManyToManyField(User, related_name="Invited Users", blank=True)
     attending = models.ManyToManyField(User, related_name="Attending Users", blank=True)
     declined = models.ManyToManyField(User, related_name="Declined Users", blank=True)
     description = models.TextField(blank=True)
Run Code Online (Sandbox Code Playgroud)

固定:

最终解决方案使用下面建议的Q()对象,同时附加.distinct()函数以确保不返回重复项.

Dan*_*man 5

你正在做的是采取三个独立的查询并将它们组合在一起.我很惊讶这一切都很有效.

相反,您需要的是一个带有三个条件的查询,它们被一起进行OR运算.您可以通过Q()对象在Django中实现此目的:

from django.db.models import Q
main_club = user.get_profile().main_club
events = Event.objects.filter(Q(club=umain_club) | Q(invclub=main_club) | Q(invited=user))
Run Code Online (Sandbox Code Playgroud)