2016-11-02 6 views
1

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とヌル置き換え)

答えて

0

質問はかなり古いですが、誰も反応しなかったので、同じ問題があったようです。 documentation

If you define a depth, you now have to write your own create and update methods that will handle the modification of the nested fields.

リンク:

実際には、応答は、バージョン3.0のrelease noteにあります。

関連する問題