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"
}
```

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么我不能在try/catch中键入多个输入?   当文件名为泰语时,enctype=“multipart/formdata”的java upload file获得了奇怪的文件名   java使用jsp在tomcat中开发kerberos   Java\JSON:无法识别的属性异常:无法识别的字段“CefMessagesGenerators”错误   java在片段中删除工具栏   java ActionListener无法处理所有对象   JAVA调用从其他包继承的类的成员(其他类类型)   java RestyGWT和GWT集成:无法获取资源   java如何检查正在执行的类   java JavaFX自定义节点不呈现子节点   持久性如何在java中非持久地存储列表的内容   java EditText在禁用时恢复为灰色文本