afr*_*afr 2 python django django-rest-framework
如何通过 id 更新嵌套序列化器中的列表
我的用户有多个联系人
例子:
接触串行器
class ContactSerializer(serializers.ModelSerializer):
class Meta:
model = Contact
fields = [
'id',
'name',
'last_name'
]
Run Code Online (Sandbox Code Playgroud)
用户序列化器
class UserSerializer(serializers.ModelSerializer):
email = serializers.EmailField(
required=True,
validators=[
UniqueValidator(queryset=User.objects.all())
]
)
contacts = ContactSerializer(many=True)
class Meta:
model = User
fields = [
"email",
"contacts"
]
def update(self, instance, validated_data):
contacts_data = validated_data.pop('contacts')
contacts = (instance.contacts).all()
contacts = list(contacts)
instance.name = validated_data.get('name', instance.name)
instance.save()
# many contacts
for contact_data in contacts_data:
contact = contacts.pop(0)
contact.name = contact_data.get('name', contact.name)
contact.last_name = contact_data.get('last_name', contact.last_name)
contact.save()
return instance
Run Code Online (Sandbox Code Playgroud)
我想按 ID 更新联系人,目前可以,但它只更新列表中的第一个联系人
示例我想更新 ID 为 4 和 6 的联系人
负载请求
{
"name": "string",
"contacts": [
{
"id": 4,
"name": "string",
"last_name": "string"
},
{
"id": 6,
"name": "string",
"last_name": "string"
}
]
}
Run Code Online (Sandbox Code Playgroud)
有什么想法或建议吗?
像这样尝试一下
def update(self, instance, validated_data):
contacts_data = validated_data.pop('contacts')
instance.name = validated_data.get('name', instance.name)
instance.save()
# many contacts
for contact_data in contacts_data:
contact = Contact.objects.get(pk=contact_data['id']) # this will crash if the id is invalid though
contact.name = contact_data.get('name', contact.name)
contact.last_name = contact_data.get('last_name', contact.last_name)
contact.save()
return instance
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6210 次 |
| 最近记录: |