Django选择不重复字段不生效
我有两个模型:
class Team(models.Model):
"""
Team model for creating a basic team.
"""
image = ThumbnailerImageField(upload_to=_profile_image_directory(), verbose_name=u'Logo', help_text=u'Uploading a team logo is highly recommended.', blank=True)
name = models.CharField(verbose_name=u'Team Name', max_length=100)
school = models.CharField(verbose_name=u'School Name', max_length=100, blank=True)
city = models.CharField(max_length=100, blank=True)
state = USStateField(blank=True)
description = models.CharField(blank=True, max_length=175)
members = models.ManyToManyField(User, through='TeamMember')
key = models.CharField(max_length=8, unique=False, blank=True)
private = models.BooleanField(blank=True)
twitter = models.CharField(verbose_name=u'Twitter handle', max_length=15, blank=True)
hashtag = models.CharField(help_text=u'Tweets containing this hashtag will be pulled into your team\'s Twitter feed', max_length=20, blank=True)
def __unicode__(self):
return u'%s' % (self.name)
class Meta:
verbose_name = u'Team'
verbose_name_plural = u'Teams'
unique_together = ('name', 'school', 'state')
class TeamMember(models.Model):
"""
Team model for connecting users with teams.
"""
user = models.ForeignKey(User)
team = models.ForeignKey(Team)
number = models.PositiveIntegerField(max_length=3, blank=True, null=True)
position = models.CharField(max_length=100, blank=True)
start = models.CharField(help_text=u'Year only. Format: 2004', max_length=4, blank=True)
end = models.CharField(help_text=u'Year only. Leave blank for current team', max_length=4, blank=True)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
我想通过名字搜索当前用户的所有队友,所以我这里有一个查询:
TeamMember.objects.filter(team__members=request.user).filter(user__username__icontains=query).exclude(user=request.user)
这个查询可以正常工作,但如果某个用户在多个相同的团队中,我会多次得到重复的用户。因此,我想在用户字段上使用 DISTINCT 或 GROUP BY,但我尝试的所有方法都没有成功。
我尝试过:
TeamMember.objects.filter(team__members=request.user).filter(user__username__icontains=query).exclude(user=request.user).distinct("user")
这个方法可以工作,但给我的用户信息不够,只返回他们的 ID,因为它被转换成了一个字典:
TeamMember.objects.filter(team__members=request.user).filter(user__username__icontains=query).exclude(user=request.user).values("user").distinct()
有什么想法吗?
1 个回答
2
你的查询返回的是不同的 TeamMember
,而不是不同的 user
。
为了获取不同的 user
:
user.objects.filter(
teammember__team__teammember__user__icontains=query
).exclude(user=request.user).distinct()
解释一下:不同的 users
是指那些 teammember
所在的 team
,这个 team
和一个包含 query
的 user
相关联,所有这些都不包括当前登录的用户。