1

現時点では、ManyToManyField について学んでいます。完全には理解できないシナリオがあります。

たとえば、これは私のモジュールです。ジム、トニー、メアリーという 3 つのアカウントを作成しました。

ユーザー Mary に Jim をフォローしてもらいます。管理ページのドロップボックスでジムをクリックすることで、メアリーを簡単にジムにフォローさせることができます. Mary の User オブジェクトと Jim のユーザー名。

Mary = User.objects.get(username='Mary')
Jim = User.objects.get(username='Jim')

メアリーにジムをフォローさせるにはどうすればよいですか? 管理ページと同じように

class Person(models.Model):
    user = models.ForeignKey(User)
    name = models.CharField(max_length=100, blank=True)
    following = models.ManyToManyField('self', related_name='followers', symmetrical=False, blank=True, null=True)

    def __unicode__(self):
        return self.name
4

2 に答える 2

3
mary = User.objects.get(username='Mary')
jim = User.objects.get(username='Jim')

#just make sure your user is saved before adding the relationship.

jim.following.add(mary)
jim.save()

余分なフィールドで何をしたかを指定するときは、基本的に関係をどのように機能させたいかを説明しています。

これmodels.ManyToManyField()が舞台裏で行っていることは、中間データベース テーブルを作成することです。通常、この "app_model1_model2" のように見えます。

selfは、同じモデルとの関係を定義していることを意味します。したがって、あなたは を取得しませんが、Django に 1 つを追加するように強制しているため、1 を取得user_setすることを決定したためです。Falsesymmetry

user.user_set.all()コードでの意味は、関連するすべてのユーザーを取得するためにできることです!

related_name='followers'Django が生成した名前ではなく、関係に名前を付けていることを意味しますfollowers。それ以外の場合は、「ユーザー」に沿ったものになると思います。すなわち。達成しようとしていることのより良い意味と表現を与えています。

これはドキュメントで非常によく説明されています!

Django docs ManyToMany-fields

于 2013-03-13T12:06:58.127 に答える
0
>>> Mary = User.objects.get(username='Mary')
>>> Jim = User.objects.get(username='Jim')
>>> Jim.following.add(Mary)
>>> Jim.save()

Django book のDjango ManyToMany の例

于 2013-03-13T12:07:32.747 に答える