を持っていませんか?「RelatedManager」オブジェクトは、私がこのように定義されたモデルを持っている何の属性
私はこのエラーを取得しています:
'RelatedManager' object has no attribute 'favourites'
私はdetails
を推測が正しいタイプではありませんが、なぜそうではありませんか?そのようなクエリを実行するにはどうすればよいですか?
を持っていませんか?「RelatedManager」オブジェクトは、私がこのように定義されたモデルを持っている何の属性
私はこのエラーを取得しています:
'RelatedManager' object has no attribute 'favourites'
私はdetails
を推測が正しいタイプではありませんが、なぜそうではありませんか?そのようなクエリを実行するにはどうすればよいですか?
user.details
にアクセスすると、UserDetail.user
外部キーの逆参照にアクセスします。外部キー自体はUser
にはUserDetail
しかないと指定していないので、djangoはRelatedManager
を提供します。これは通常のManager
のようにフィルタリングしてクエリできます。だからあなたはあなたが.objects
のマネージャに行うことと同じことをします。 user.details.all()
、user.details.filter()
、user.details.get()
などを求めることができます。これは、メソッドと結果に応じてクエリーセット、オブジェクト、または例外を提供します。
これは、UserDetailオブジェクトがすでにそのユーザのために存在すると仮定しそうget()
は、例外が発生します
request.user.details.get().favourites.add(article)
を試してみてください。
ああ!それは今よりずっと意味をなさない。 * User *にはUserDetailが1つしかないことは明白でしたが、どこにも指定されていないと思います。ありがとうございました。 – mpen
ForeignKeyを使用する代わりにOneToOneFieldを使用するようにモデルを変更した場合、期待どおりに行うことができます。 OneToOneFieldsはForeignKeysと似ていますが、Djangoは関連するオブジェクトが1つしかないため、関連するマネージャーではなくオブジェクトに直接アクセスできます。 https://docs.djangoproject.com/ja/dev/ref/models/fields/#onetoonefieldを参照してください。 – mbargiel