私は私のアプリでこれらのシリアライザを持って働いていません。私はドキュメンテーションに従ったと思うが、それをテストするとネストされたシリアル化は機能しない。私はinstance
とvalidated_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)
シリアライザを動作させるために何らかの理由でこれらのフィールドを指定しなければなりませんでした。問題は、私が私の見解が幾分学問分野を変えてオブジェクトを文字列にすることにあったということでした。シリアライザを起動する前に、オブジェクトとして再び変換しました。現在は動作しています。 –
Joabは少し説明したり、コードスニペットを投稿したりできますか?私は同じ問題を抱えています –
@JesusAlmaral問題は、関連オブジェクトをプリミティブな値ではなくオブジェクトとしてシリアル化したい場合、ネストされたシリアライザを使用してシリアル化する必要があるということです。http://www.django-rest- framework.org/api-guide/serializers/#dealing-with-nested-objects –