2

私は私のアプリでこれらのシリアライザを持って働いていません。私はドキュメンテーションに従ったと思うが、それをテストするとネストされたシリアル化は機能しない。私はinstancevalidated_dataオブジェクトを印刷し、それをシェルでテストしました。Djangoの残りのフレームワークネストされたシリアル化が適切に

私は、この形式のデータを起動します。

data = {u'phone_number': u'+99999999999', u'bio': u'BIO', u'price': 40, u'disciplines': [{'id': 1}], u'schedules': [{'id': 2}]} 

私は教師のインスタンスを持って、このようにシリアライザを開始しました:

serializer = WriteTeacherSerializer(teacher, data=data) 

それはserializer.is_valid()コールに真を示します。

は、しかし、私はそれをvalidated_dataを保存しようとするとinstance.__dict__はそのようなものです:

#validated_data 
{u'phone_number': u'+5584998727770', u'bio': u'BIO', u'price': 40, u'disciplines': [OrderedDict()], u'schedules': [OrderedDict()]} 


#instance.__dict__ 
{'phone_number': u'', 'bio': u'', 'price': 50, 'profile_id': 2, '_state': <django.db.models.base.ModelState object at 0xb64a6bec>, 'id': 6} 

彼らは、ネストされたフィールドをupdate()メソッドが動作しない可能WICH気づいていないようです。

何か間違っていますか?

はここだけでなく、私の先生のモデルである:

class Teacher(models.Model): 

    price = models.IntegerField(default=50) 
    phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$', message="Wrong phone number format.") 
    phone_number = models.CharField(validators=[phone_regex], max_length=15, blank=True) 
    profile = models.OneToOneField(Profile, on_delete=models.CASCADE) 
    schedules = models.ManyToManyField(Schedule, related_name='schedules') 
    disciplines = models.ManyToManyField(Discipline, related_name='disciplines') 
    bio = models.CharField(max_length=200, blank=True) 

答えて

2

あなただけの、あなただけのForeignKeyまたはManyToManyFieldのフィールド名を指定して、ネストされたシリアライザを追加する必要はありませんIDsを送信する場合。

class WriteTeacherSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Teacher 
     fields = ('phone_number', 'bio', 'price', 'disciplines', 'schedules') 

あなたがdepth=1旗を持っているので、それがあれば、私も疑問に思って?

DRFでは、ネストされた更新をサポートしていません。シリアライザの更新メソッドをオーバーライドして独自の更新ロジックを作成する必要があるため、ネストされたデータを送信する場合はこの警告のエラーが表示されます。

+1

シリアライザを動作させるために何らかの理由でこれらのフィールドを指定しなければなりませんでした。問題は、私が私の見解が幾分学問分野を変えてオブジェクトを文字列にすることにあったということでした。シリアライザを起動する前に、オブジェクトとして再び変換しました。現在は動作しています。 –

+0

Joabは少し説明したり、コードスニペットを投稿したりできますか?私は同じ問題を抱えています –

+0

@JesusAlmaral問題は、関連オブジェクトをプリミティブな値ではなくオブジェクトとしてシリアル化したい場合、ネストされたシリアライザを使用してシリアル化する必要があるということです。http://www.django-rest- framework.org/api-guide/serializers/#dealing-with-nested-objects –

関連する問題