2012-01-11 10 views
1

を働いていない明確なフィールドを選択:Djangoは、私が2機種持っ

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") 

それが辞書に変換されるので、この1は動作しますが、私のユーザーに関する十分な情報を与えるものではありません、ちょうど彼らID:

TeamMember.objects.filter(team__members=request.user).filter(user__username__icontains=query).exclude(user=request.user).values("user").distinct() 

何かご意見は?

+0

私の回答はあなたの問題に役立ちますか?私はそれを改善することはできますか?これを修正するためにこれが間違った答えであるかどうかを教えてください。 – danihp

答えて

2

あなたのお問い合わせは、別のTeamMemberではないuserを返します。 user明確な得るために

user.objects.filter( 
       teammember__team__teammember__user__icontains=query 
     ).exclude(user=request.user).distinct() 

を説明:彼らteammemberqueryこのすべてを除くログインしているユーザーが含まれているuserを持ってteammemberに関連しているteamを持っていることをdistincts usersを。

関連する問題