优化的可包含序列化程序字段。

djangorestframework-include-mixin的Python项目详细描述


django rest framework轻型可包含序列化程序字段

要求

用法

serializers.py

classGroupSerializer(SerializerIncludeMixin,ModelSerializer):@classproperty# django.utils.decoratorsdefextra_objects(cls):return{'users':UserSerializer(source='user_set',many=True),'active_users':UserSerializer(many=True),}classMeta:model=Groupfields=('id','name')

views.py

classGroupViewSet(QueryOptimizerMixin,ReadOnlyModelViewSet):"""    Groups.    list:    Available includable objects:      * users - all users;      * active_users - only active users.    """queryset=Group.objects.all()serializer_class=GroupSerializerselect_related={}prefetch_related={'users':'user_set','active_users':Prefetch(lookup='user_set',queryset=User.objects.filter(is_active=True),to_attr='active_users',),}

现在我们可以做到了:

client=APIClient()response=client.get(# GET /groups/?include[]=active_users'/groups/',data=[('include[]','active_users'),],)

这将只进行2次查询:

  • 所有组
  • 仅预取活动用户

文档

H2> RestyFraseWorkPixdioMyin。SerializerIncludeMixin < /H2>

在任何序列化程序中用于自动替换和添加序列化程序字段。

extra_objects类变量

key:str-来自get参数的值include[]。 例如,profile表示/users/?include[]=profile

value:序列化程序-任何字段序列化程序。

示例:

classUserSerializer(SerializerIncludeMixin,ModelSerializer):extra_objects={'profile':ProfileSerializer(),'groups':GroupSerializer(many=True),}classMeta:model=Userfields=('id','profile_id')
GET parametersResult serializer fields
'id': IntegerField(), 'profile_id': IntegerField()
?include[]=profile'id': IntegerField(), 'profile': ProfileSerializer()
?include[]=groups'id': IntegerField(), 'profile_id': IntegerField(), 'groups': GroupSerializer(many=True)
?include[]=profile&include[]=groups'id': IntegerField(), 'profile': ProfileSerializer(), 'groups': GroupSerializer(many=True)

注意:带/不带_id的标准序列化程序字段将替换为extra_objects中的字段。

对于?include[]=profileprofileprofile_id将从extra_objects替换为profile

< H2> RestyFraskWorkPixDyMixin

用于ModelViewSet以优化数据库查询。

select_related类变量

key:str-来自get参数的值include[]

value:str-可以传递给select相关(model manager function)的字段名。

prefetch_related类变量

key:str-来自get参数的值include[]

value:union[str,prefetch]-可以传递给预取相关(model manager function)的字段名或预取对象。

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

推荐PyPI第三方库


热门话题
java如何将cassandra中的行数据转换为与列相关的嵌套json   java如何使用jcr XPath在jcr:content/@jcr:data中搜索?   java在使用openCV进行安卓开发时如何利用手机的广角镜头   java解析扩展了接口,结束了一个潜在的无限循环   位置服务的@Override方法中存在java Android应用程序错误   java本地线程的用途和需求是什么   具有左右子访问的java节点树遍历   java验证JsonWebToken签名   JUL日志处理程序中的java日志记录   嵌入式Java读取给定时间段的串行数据。   java有没有办法从多个URL获取多个图像?   java线程通过等待intent阻止自己发送intent   java Spring MVC解析多部分内容请求   java JPA/Hibernate静态元模型属性未填充NullPointerException   java格式错误的字符(需要引号,得到I)~正在处理   java为什么PrintWriter对象抛出FileNotFoundException?   java Neo4j未正确保存标签   java IE不加载图像