2013-03-24 62 views
0

我爲以下功能實現了ManyToManyField,該功能允許用戶關注其他用戶以及他們是否跟隨其他用戶。 他們將能夠檢索他們的對象。Django ManyToManyField檢索兩個對象錯誤

這是我的模塊

class Person(models.Model): 
    user = models.ForeignKey(User) 
    name = models.CharField(max_length=100, blank=True) 
    image = models.FileField(upload_to="images/",blank=True) 
    following = models.ManyToManyField('self', related_name='followers', symmetrical=False, blank=True, null=True) 
    birthday = models.DateField(blank=True,null=True) 

    def __unicode__(self): 
     return self.name 

class Board(models.Model): 

    user = models.ForeignKey(User) 
    name = models.CharField(max_length=100) 
    created = models.DateTimeField(auto_now_add=True) 
    picture = models.OneToOneField('Picture',related_name='picture',blank=True,null=True) 
    def __unicode__(self): 
     return self.name 

用戶是繼2個用戶,如果問題。我只能夠檢索單個用戶對象而不是兩個用戶。

例如,我創建了3個用戶,Jimmy,Sarah和Simon。薩拉是繼西蒙和吉米

吉米董事會叫吉米的數學局,吉米英文局 西蒙有一個單板叫西蒙的白板

的問題是下面

>>> from pet.models import * 
>>> from django.contrib.auth.models import User 
>>> user = User.objects.get(username='Sarah') 
>>> person = Person.objects.get(user=user) 
>>> sarah = Person.objects.get(user=user) 
>>> sarah.following.all() # SARAH IS FOLLOWING JIMMY AND SIMON 
[<Person: Jimmy>, <Person: Simon>] 
>>> users = User.objects.filter(pk__in=sarah.following.all().values_list('user__pk',flat=True)) 
>>> users 
[<User: Jimmy>, <User: Simon>] # I'm able to retrieve their users 
>>> board = Board.objects.filter(user=users) # when I search for their boards , I only retrieve a single user . Jimmy's board not Simon 
>>> board 
[<Board: Jimmy's Math Board>, <Board: Jimmy English Board>] 
>>> person = Person.objects.filter(user=users) 
>>> person 
[<Person: Jimmy>] 

如何取回這兩個用戶板?

+0

什麼'Board.objects.filter(user__in = sarah.following.all()。values_list( 'user__pk',扁=真))'return? – Ngenator 2013-03-24 02:35:58

+0

@Ngenator這是回報[,]但當我做Board.objects.filter(用戶=用戶)。它只能檢索吉米的董事會,而不是兩個西蒙的董事會 – donkeyboy72 2013-03-24 02:37:51

+0

@Ngenator感謝您的編輯 – donkeyboy72 2013-03-24 02:38:15

回答

1

因爲board = Board.objects.filter(user=users)正在過濾user它期望提供一個用戶。如果您要執行類似board = Board.objects.filter(user__in=users)(使用__in過濾器),則過濾將正確使用用戶對象列表。

您也可以使用ID的對象,而不是一個平面列表,像這樣board = Board.objects.filter(user__in=sarah.following.all().values_list('user__pk',flat=T‌​rue))

+0

謝謝你幫助我:} – donkeyboy72 2013-03-24 03:00:19

相關問題