Django Rest Frameworkを使用して、POSTを介してモデルオブジェクトを追加しようとしていますが、新しいオブジェクトに外部キーが必要な既存オブジェクトのIDを指定しています。作品。しかし、新しいオブジェクトのシリアライザにdepth = 1を追加すると、GETで外部キーターゲットを取得すると、新しいオブジェクトを追加するPOSTがmysqlエラー 'IntegrityError :(1048、 "Column' reportdefinition_id '私のPOSTで有効な外部キーIDを指定していても、 "null"になります)。Django Rest Framework外来キーと深度= 1を持つオブジェクトを追加する
深度= 1を残しておき、クライアントでレポート定義を個別に取得することで回避できますが、面倒です。
(私は2つの関連の質問、どちらも答え鉱山を発見した: Django REST - Create object with foreign key using serializers Need to show Foreign Key Object in Details by Django Rest Framework)
モデル(私は無関係なフィールドを示していませんでした):
class ReportDefinition(models.Model):
name = models.CharField(max_length=254, blank=True, null=True)
class ReportRun(models.Model):
status = models.IntegerField(default=2)
reportdefinition = models.ForeignKey(ReportDefinition)
シリアライザ:
class ReportDefinitionSerializer(serializers.ModelSerializer):
id = serializers.ReadOnlyField()
class Meta:
model = models.ReportDefinition
fields = ("id","name")
class ReportRunSerializer(serializers.ModelSerializer):
id = serializers.ReadOnlyField()
class Meta:
depth = 1
model = models.ReportRun
fields =("id","status","reportdefinition")
「depth = 1」を削除すると、POSTが機能します。
class ReportRunSerializer(serializers.ModelSerializer):
id = serializers.ReadOnlyField()
class Meta:
model = models.ReportRun
fields =("id","status","reportdefinition")
POSTの内容(再び、無関係な他の属性が示されていない):私が気づい
reportdefinition:1
一つのこと:深さ= 1せずに、DRF閲覧可能なAPIは、デフォルトで "ReportDefinitionの" を示し深度= 1の場合、それはありません。明示的に追加する必要があります。
深さDRF閲覧可能なAPIの内容= 1:
{
"status": null,
}
(私は "ReportDefinitionの" 追加:1は、POSTを発行し、それがChromeデベロッパーツール使用して表示されていることを確認してください)
DRF閲覧可能なAPIをno 'に深さ= 1' との内容:
{
"status": null,
"reportdefinition": null
}
(POSTを発行するとき、私は1とヌル置き換え)