我正在尝试从特定模型中获取查询。我无法正确过滤数据。
我已经修复了一个错误,它返回了其他用户数据,但现在它返回了模型中一行数据的副本。
events = Event.objects.filter(club=user.get_profile().main_club) | Event.objects.filter(invclub=user.get_profile().main_club) | Event.objects.filter(invited=user)
这是我正在尝试执行的查询。
我的目标是,让用户手动邀请所有活动(邀请)他们的俱乐部已被邀请(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)
修正:
最终解决方案使用下面建议的Q()对象,同时附加.distinct()函数以确保不返回重复项。
答案 0 :(得分:5)
您正在做的是进行三次独立查询并将它们一起进行OR运算。我对此感到惊讶。
相反,您需要的是一个带有三个条件的查询,它们被一起进行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))