boa*_*der 6 django django-rest-framework
我有一个角度应用程序,它提供了一个包含联系人数据和联系号码列表的表单.每个联系人都可以有N个号码,每个号码都有一个类型(单元格,主页,工作......)下面的代码将json发送到角度应用程序就好了,我可以在那里处理它,包括添加新数字,删除数字.....但是当DRF获得完全相同的格式json时,它无法反序列化它.它抛出了这个错误:
AttributeError: 'Contact' object has no attribute 'numbers'
Run Code Online (Sandbox Code Playgroud)
这是完全有效的,但序列化程序有这个字段,应该能够挂起这些值,以便我保存联系后保存它们.
如果我在更新方法中做了类似这样的事情:
self.object = self.get_object_or_none()
self.object.numbers = []
Run Code Online (Sandbox Code Playgroud)
我可以消除该错误,但它会抛弃这些错误:
{'numbers': [
{u'non_field_errors': [u'Cannot create a new item, only existing items may be updated.']},
{u'non_field_errors': [u'Cannot create a new item, only existing items may be updated.']},
{u'non_field_errors': [u'Cannot create a new item, only existing items may be updated.']}
]}
Run Code Online (Sandbox Code Playgroud)
前两个电话号码不是新的,它们有id字段,来自db,第三个是新的,我正在尝试添加它.
这是代码.当然,这不是一种奇怪的做事方式.Django Rest Framework是我应该使用的吗?我一直在试着像这样的表演停止者,这似乎是记录下来的做事方式,但随后它们爆发了.
class PhoneTypeSerializer(serializers.ModelSerializer):
class Meta:
model = PhoneType
class ContactPhoneSerializer(serializers.ModelSerializer):
number_type = PhoneTypeSerializer(source='number_type')
class Meta:
model = ContactPhone
depth = 1
exclude = ('owner',)
class ContactSerializer(serializers.ModelSerializer):
numbers = ContactPhoneSerializer(source='number_set', many=True, required=False)
class Meta:
model = Contact
Run Code Online (Sandbox Code Playgroud)
如何反序列化此数据以便保存?
我有同样的问题,并通过向序列化程序添加一些标志来解决它.在你的情况下,它应该是这样的:
number_type = PhoneTypeSerializer(source='number_type', many=True, required=False, allow_add_remove=True, read_only=False)
Run Code Online (Sandbox Code Playgroud)
有点晚了,但也许它仍然有帮助.在此处找到此建议: 使用序列化程序作为字段时无法更新m2m
归档时间: |
|
查看次数: |
1073 次 |
最近记录: |