0

ユーザーが他のユーザーをフォローできるようにする次の機能と、他のユーザーをフォローする場合に、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人のユーザーをフォローしている場合です。両方のユーザーではなく、1つのユーザーオブジェクトしか取得できません。

たとえば、Jimmy、Sarah、Simonの3人のユーザーを作成しました。サラはサイモンとジミーをフォローしています

ジミーにはジミーの数学ボードと呼ばれるボードがあり、ジミー英語ボードサイモンにはサイモンのホワイトボードと呼ばれるシングルボードがあります

問題は下にあります

 >>> 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>]

これらのユーザーボードの両方を取得するにはどうすればよいですか?

4

1 に答える 1

1

board = Board.objects.filter(user=users)によるフィルタリングであるためuser、1 人のユーザーが提供されることが期待されます。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))

于 2013-03-24T02:54:36.617 に答える