Ogn*_*jen 5 django django-rest-framework django-1.6
我正在使用Django 1.6.8和Django Rest 2.4.4.我有一个Person模型,其中包含Address和PhoneNumbers的单独模型.
class Person(models.Model):
address = models.OneToOneField(Address, blank=True, null=True)
phoneNumbers = models.ManyToManyField(PhoneNumber, blank=True)
class Address(models.Model):
address = models.CharField(max_length=50)
city = models.CharField(max_length=50)
state = models.CharField(max_length=2)
class PhoneNumber(models.Model):
number = models.CharField(max_length=15)
numberType = models.CharField(default='Mobile', max_length=15)
Run Code Online (Sandbox Code Playgroud)
我在Django REST框架中使用嵌套的序列化程序.
class PersonSerializer(serializers.HyperlinkedModelSerializer):
id = serializers.Field('id')
address = AddressSerializer(source='address')
phoneNumbers = PhoneNumberSerializer(many=True)
Run Code Online (Sandbox Code Playgroud)
这适用于GET(我将地址和电话号码作为嵌套的json字段),但我需要相同的PUT/POST/PATCH.具体来说,对于每个电话号码,我希望在指定id时更新它,或者如果json中没有id则创建它.对于地址也一样,都在同一个API调用中.
pch*_*uet 10
您需要实现自己的create()和/或update()方法来支持它.
它在Django Rest文档中进行了解释,自Django Rest 3.0以来它可用:
以下示例演示了如何处理使用嵌套配置文件对象创建用户的方法.
class UserSerializer(serializers.ModelSerializer):
profile = ProfileSerializer()
class Meta:
model = User
fields = ('username', 'email', 'profile')
def create(self, validated_data):
profile_data = validated_data.pop('profile')
user = User.objects.create(**validated_data)
Profile.objects.create(user=user, **profile_data)
return user
Run Code Online (Sandbox Code Playgroud)
(......)
由于嵌套创建和更新的行为可能不明确,并且可能需要相关模型之间的复杂依赖性,因此REST框架3要求您始终显式编写这些方法.默认的ModelSerializer .create()和.update()方法不包括对可写嵌套表示的支持.
| 归档时间: |
|
| 查看次数: |
4905 次 |
| 最近记录: |