2017-08-23 6 views
0
class User(models.Model): 
    name = models.CharField(max_length=100) 
    age = models.IntegerField() 
    gender = models.IntegerField() 
    email = models.CharField(max_length=100) 
    password = models.CharField(max_length=255) 
    following = models.ManyToManyField("self", related_name='followers') 
    objects = UserManager() 
    def __repr__(self): 
     return "User: {0}".format(self.name) 

私のモデルでは、ユーザーは、ユーザーがお互いに従うことができます。ジャンゴ、自己クラス内の多くの関係に多くの場合、どのようにORMの面でお互いを参照するのですか?

私は、ユーザーが、このことにより、以下のいる人を見つけることができます。

user1 = User.objects.get(id=1) 
following = user1.following.all() 

しかし、私は、ユーザーが続いている人を見つける方法を見つけ出すことはできません。

私が試した:

user1.followers.all() 

それは私のモデルで、次のフィールドにrelated_nameからです。

誰でも私にこのことを教えることができますか?

ありがとうございました。

答えて

1

symmetrical属性をFalseにする必要があります。ドキュメントから

Djangoがこのモデルを処理するとき、それは自分自身にManyToManyFieldがあり、結果として、それはUserクラスにfollowers属性を追加しないことを識別します。代わりに、ManyToManyFieldは対称であるとみなされます。つまり、私があなたのfollowerであれば、私のfollowerです。あなたはselfと多対多の関係に対称性を望まない場合は

は、Falsesymmetricalを設定します。これにより、Djangoに逆の関係の記述子を追加させ、ManyToManyFieldの関係を非対称にすることができます。あなたのケースでは

class User(models.Model): 
    # ... 
    following = models.ManyToManyField("self", related_name='followers', symmetrical=False) 
    # ... 

は、その後、あなたのviews.pyに、あなたは両方にアクセスすることができます

following = user.following.all() 
followers = user.followers.all() 

selfとの関係は非対称である今ので。

+0

ありがとう – Jung

関連する問題