django rest框架的扩展,允许编写嵌套关系
drf-nested-relations的Python项目详细描述
drf嵌套关系
此python包是django rest框架的扩展,用于创建、更新和删除嵌套关系。嵌套关系可以"任意深度"。
它暂时适用于泛型关系和外键。
*如果字典包含"id"字段,则会更新嵌套数据。
*如果字典不包含"id",则会创建新数据。
*如果字典仅包含"id"作为键,则会创建数据。a将被删除。
content_type=models.foreignkey(contenttype,on_delete=models.cascade,blank=true,null=true)
object_id=models.positiveintegerfield(blank=true,null=true)
content_object=genericforeignkey()
phone=models.charfield(最大长度=25,blank=true,null=true)
email=models.emailfield()
class person(models.model):
name=models.charfield(max_length=50)
contact_data=genericreation(contactdata,related_query_name='content_obj_person')
class skill(models.model):
name=models.charfield(max_length=50)
person=models.foreignkey('person',related庘name='skills',on庘delete=models.cascade)
``````
类ContactDataserializer(serializers.modelSerializer):
类meta:
模型=ContactData
排除=("内容类型"、"对象ID")
类SkillSerializer(serializers.modelSerializer):
类meta:
模型=技巧
排除=('person',)
Class PersonSerializer(NestedDataModelSerializer):
contact_data=serializer.jsonField(必需=false,允许=true)
skills=serializer.jsonField(必需=false,允许=true)
Class meta:
model=person
fields='\uu all'
nestedserializer={
'联系人数据':{'serializer'u类':联系人数据序列化程序,'many':true,'kwargs':'content'object'},
'技巧':{'serializer'u类':skillserializer,'many':true,'kwargs':'person'}
`````
*对于泛型关系,
在嵌套序列化程序中使用"field\u name=serializers.jsonfield()"和相同的"field\u name"。(主模型中指向嵌套关系的属性)
*对于外键,
在嵌套序列化程序中使用"related\u name=serializers.jsonfield()"和相同的"related\u name"。(主模型中指向嵌套关系的属性)
*对于两者,
提供"many=true"。从示例中可以清楚地看到'kwargs'的值。嵌套关系中的一个属性指向主模型。
序列化程序(data=data,context={'request':request})
person_序列化程序.是否有效(raise_exception=true)
person=person_serializer.save()
print(person_serializer.data)
{
"id":3,
"contact_data":[
{
"id":4,
"phone":空,
"email":"1@1.com"
},
{
"id":5,
"phone":空,
"email":"2@2.com"
},
{
"id":6,
"phone":空,
"email":"3@3.com"
}
],
"skills":[],
"name":"sagar"
}
{delete
"id":5
},
{data=data,context={'request':请求}
person_serializer.save()
打印(person_serializer.data)
{
"id":3,
"联系人数据":[
{
"id":4,
"电话":空,
"电子邮件":"1@1edit.com"
,
{#无变化
"id":6,
"phone":空,
"email":"3@3.com"
},
{
"id":7,
"phone":空,
"email":"4@4.com"
}
],
"skills":[],
"name":"sagar"
}
```