假设我有以下型号:
ssh-copy-id
在视图中,我想执行以下操作:
Chat(models.Model):
community = models.ForeignKey(Community, related_name="chats", null=True, blank=True)
....
Community(models.Model):
slug = models.CharField(max_length=250, unique=True, default='')
....
Profile(models.Model):
public_name = models.CharField(max_length=20, unique=True)
community_subscriptions = models.ManyToManyField('Community', through='CommunitySubscription')
chat_subscriptions = models.ManyToManyField('Chat', through='ChatSubscription')
....
ChatSubscription(models.Model):
profile = models.ForeignKey(Profile, unique=False, related_name='chat_subscription')
chat = models.ForeignKey(Chat, null=True, blank=True, related_name='chat_subscribers')
....
CommunitySubscription(models.Model):
....
如果聊天存在,那么两个配置文件都会有一个ChatSubscription对象,将该配置文件与聊天相关联。
是否可以在一行中使用Django QuerySets进行此类过滤?如果不是,在多行中最有效的方法是什么?
提前多多感谢。
答案 0 :(得分:2)
非常复杂,因此请尝试使用Q object来执行' AND'查询(假设我得到了你正在尝试做的事情):
from django.db.models import Q
Chat.objects.filter(Q(chatsubscription__profile__in=[profileA,profileB]) & Q(community=communty))