[解決済み] DRF: ネストされたシリアライザーによる単純な外部キー割り当て?
質問
Django REST Framework では、標準的な ModelSerializer は、ID を整数値で POST することで ForeignKey モデル関係を割り当てたり変更したりすることができます。
はどうなっているかというと 最もシンプルな というのは、ネストされたシリアライザからこの動作を得るにはどうしたらよいでしょうか?
注意:私は既存のデータベースオブジェクトの割り当てについてだけ話しています。 ではなく ネストされた作成ではありません。
私は過去にシリアライザーに 'id' フィールドを追加してこれを回避し、カスタム
create
と
update
メソッドを使用していますが、これは私にとって一見単純で頻繁に発生する問題なので、最良の方法を知りたいと思っています。
class Child(models.Model):
name = CharField(max_length=20)
class Parent(models.Model):
name = CharField(max_length=20)
phone_number = models.ForeignKey(PhoneNumber)
child = models.ForeignKey(Child)
class ChildSerializer(ModelSerializer):
class Meta:
model = Child
class ParentSerializer(ModelSerializer):
# phone_number relation is automatic and will accept ID integers
children = ChildSerializer() # this one will not
class Meta:
model = Parent
どのように解決するのですか?
最良の解決策は、読み込み用と書き込み用の2つのフィールドを使用することです。いくつかの 重い を行わないと、探しているものを得ることは困難です。 を単一のフィールドで .
読み取り専用のフィールドは、ネストしたシリアライザー(
ChildSerializer
この場合) で、期待するのと同じネストされた表現を得ることができるようになります。ほとんどの人はこれを単に
child
と定義します。なぜなら、この時点ですでにフロントエンドが書かれており、それを変更すると問題が生じるからです。
書き込み専用のフィールドは
PrimaryKeyRelatedField
で、これは通常、主キーに基づいたオブジェクトの割り当てに使用されるものです。 これは書き込み専用である必要はありません。特に、受信するものと送信するものの間に対称性を持たせようとしている場合は、それが最も適しているように聞こえます。このフィールドには
a
source
を外部キーフィールドに設定します (
child
に設定されているため、作成時や更新時に適切に割り当てられます。
これはディスカッション グループで何度か取り上げられましたが、やはりこれが最良の解決策だと思います。感謝 Sven Maurer の指摘に感謝します。 .
関連
-
[解決済み] ディクショナリーで最大値を持つキーを取得する?
-
[解決済み] MySQLで外部キー制約を一時的に無効にするにはどうすればよいですか?
-
[解決済み] Pythonのマルチプロセッシングプールimap_unorderedの呼び出しの進捗を表示しますか?
-
[解決済み] django.db.migrations.exceptions.InconsistentMigrationHistory
-
[解決済み] 値で列挙名を取得する [重複]。
-
[解決済み] Pythonで0xを使わずにhex()を使うには?
-
[解決済み] if 節の終了方法
-
[解決済み] Pythonでファイルの読み込みと上書きをする
-
[解決済み] データクラスとtyping.NamedTupleの主な使用例
-
[解決済み] django-rest-framework のシリアライザーを使って外部キー値を取得する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pandasのデータフレームでタプルの列を分割するにはどうしたらいいですか?
-
[解決済み] Pythonの要素別タプル演算(sumなど
-
[解決済み] dict を txt ファイルに書き、それを読み取る?
-
[解決済み] SQLAlchemy: 日付フィールドをフィルタリングする方法は?
-
[解決済み] Pandasの'Freq'タグにはどのような値が有効ですか?
-
[解決済み] PythonからSMTPを使用してメールを送信する
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
-
[解決済み] Flask でグローバル変数はスレッドセーフか?リクエスト間でデータを共有するには?
-
[解決済み] 新しいpip backtrackingの実行時問題の解決
-
[解決済み] データクラスとtyping.NamedTupleの主な使用例