[解決済み] Django Rest Frameworkを使用して、関連するモデルフィールドを含めるにはどうすればよいですか?
2022-04-21 07:03:24
質問
例えば、次のようなモデルがあるとします。
class Classroom(models.Model):
room_number = [...]
class Teacher(models.Model):
name = [...]
tenure = [...]
classroom = models.ForeignKey(Classroom)
代わりにManyRelatedPrimaryKeyField関数あたりでこのような結果が得られるとしよう。
{
"room_number": "42",
"teachers": [
27,
24,
7
]
},
のように、完全な関連モデル表現を含むものを返すようにします。
{
"room_number": "42",
"teachers": [
{
'id': 27,
'name': 'John',
'tenure': True
},
{
'id': 24,
'name': 'Sally',
'tenure': False
},
]
},
これは可能ですか?もし可能なら、どのように?また、これは悪い考えなのでしょうか?
解決方法は?
最も簡単な方法は 深さの引数
class ClassroomSerializer(serializers.ModelSerializer):
class Meta:
model = Classroom
depth = 1
しかし、この場合、順方向のリレーションシップしか含まれません。この場合、教師フィールドは逆方向のリレーションシップなので、必要なものではありません。
もっと複雑な要件 (たとえば、逆方向のリレーションシップを含める、一部のフィールドはネストするが他のフィールドはネストしない、あるいは特定のフィールドのサブセットのみをネストする) がある場合は、次のようにします。 ネストシリアライザー 例えば...
class TeacherSerializer(serializers.ModelSerializer):
class Meta:
model = Teacher
fields = ('id', 'name', 'tenure')
class ClassroomSerializer(serializers.ModelSerializer):
teachers = TeacherSerializer(source='teacher_set')
class Meta:
model = Classroom
シリアライザー・フィールドのsource引数で、フィールドのソースとして使用する属性を指定していることに注意してください。 そのため
source
引数の代わりに
teachers
属性が存在する場合は
関連名
オプションで
Teacher
モデル、つまり
classroom = models.ForeignKey(Classroom, related_name='teachers')
注意点としては、ネストされたシリアライザーは現在書き込み操作をサポートしていないことです。 書き込み可能な表現には、pkやハイパーリンクのような通常のフラットな表現を使うべきでしょう。
関連
-
PythonはWordの読み書きの変更操作を実装している
-
python implement mysql add delete check change サンプルコード
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み] データ型が理解できない
-
[解決済み】Djangoのクエリセットフィルタリングでnot equalを行うにはどうすればよいですか?
-
[解決済み] Djangoのバージョンを確認する方法
-
[解決済み] Django のカスタムフィールドで User モデルを拡張する
-
[解決済み] Django REST フレームワーク: 非モデルシリアライザー
-
[解決済み] モデルとリレーションシップフィールドの名前を変更するためのDjangoマイグレーション戦略
-
[解決済み] DjangoのRestフレームワークでレスポンスに仲介(モデル経由)を含める。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
PythonによるLeNetネットワークモデルの学習と予測
-
opencvとpillowを用いた顔認証システム(デモあり)
-
Python Decorator 練習問題
-
PicgoのイメージベッドツールをPythonで実装する
-
python implement mysql add delete check change サンプルコード
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
PythonでECDSAを実装する方法 知っていますか?
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み】TypeError: 系列を <class 'float'> に変換することができません。
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない