python +python django 报表多表联合查询方法求教

用户名:aqszhuaihuai
文章数:51
访问量:41219
注册日期:
阅读量:1297
阅读量:3317
阅读量:436818
阅读量:1123920
51CTO推荐博文
Django-rest-framework多条件查询/分页/多表Jsondjango-rest-framework多条件查询需要覆写ListAPIView.get_queryset方法,代码示例:def&get_queryset(self):
&&&&使用request.query_params实现多条件查询,也可以使用django&filter&,较简单的
&&&&方法是在filter_fields中指定要过滤的字段,但只能表示等值,不灵活,灵活的方式是
&&&&使用FilterSet,如下示例:
&&&&class&ProductFilter(django_filters.rest_framework.FilterSet):
&&&&&&&&min_price&=&django_filters.NumberFilter(name="price",&lookup_expr='gte')
&&&&&&&&max_price&=&django_filters.NumberFilter(name="price",&lookup_expr='lte')
&&&&&&&&class&Meta:
&&&&&&&&&&&&model&=&Product
&&&&&&&&&&&&fields&=&['category',&'in_stock',&'min_price',&'max_price']
&&&&class&ProductList(generics.ListAPIView):
&&&&&&&&queryset&=&Product.objects.all()
&&&&&&&&serializer_class&=&ProductSerializer
&&&&&&&&filter_backends&=&(django_filters.rest_framework.DjangoFilterBackend,)
&&&&&&&&filter_class&=&ProductFilter
&&&&queryset&=&Snippet.objects.all()
&&&&title&=&self.request.query_params.get('title',&None)
&&&&language&=&self.request.query_params.get('language',&None)
&&&&style&=&self.request.query_params.get('style',&None)
&&&&aQ&=&Q()
&&&&if&title&is&not&None:
&&&&&&&&aQ.add(Q(title__startswith=title),&Q.AND)
&&&&if&language&is&not&None:
&&&&&&&&aQ.add(Q(language=language),&Q.AND)
&&&&if&style&is&not&None:
&&&&&&&&aQ.add(Q(style=style),&Q.AND)
&&&&queryset&=&queryset.filter(aQ).order_by("-id")
&&&&return&queryset至于分页,只需要在View中指定分页类,或者在settings.py中指定pagination_class&=&StandardResultsSetPagination
#或setting.py
REST_FRAMEWORK&=&{
&&&&'DEFAULT_PAGINATION_CLASS':&'rest_framework.pagination.PageNumberPagination',
&&&&'PAGE_SIZE':&100}涉及到多表的Json,重新编写Serializer,附加上所需要的字段,在View中使用新的Serializer。'''
关于Serializer,一般情况下,一个实体(Model)对应一个S
在涉及到表关联查询显示时,可以额外编写Serializer,包含关联表中
所需要的字段。
class&SnippetJoinUserSerializer(ModelSerializer):
&&&&owner&=&serializers.ReadOnlyField(source='owner.username')
&&&&email&=&serializers.ReadOnlyField(source='owner.email')
&&&&user_id&=&serializers.ReadOnlyField(source='owner.id')
&&&&last_login&=&serializers.ReadOnlyField(source='owner.last_login')
&&&&class&Meta:
&&&&&&&&model&=&Snippet
&&&&&&&&fields&=&('id',&'title',&'code',&'linenos',&'language',&'style',&'owner',
&&&&&&&&&&&&&&&&&&'email','user_id','last_login')输出结果就是包含了user信息的Json。GET&/snippet_join_users/
HTTP&200&OK
Allow:&GET,&HEAD,&OPTIONS
Content-Type:&application/json
Vary:&Accept
&&&&"count":&8,
&&&&"next":&"http://127.0.0.1:8000/snippet_join_users/?page=2",
&&&&"previous":&null,
&&&&"results":&[
&&&&&&&&&&&&"id":&8,
&&&&&&&&&&&&"title":&"test8",
&&&&&&&&&&&&"code":&"test",
&&&&&&&&&&&&"linenos":&false,
&&&&&&&&&&&&"language":&"abap",
&&&&&&&&&&&&"style":&"algol",
&&&&&&&&&&&&"owner":&"admin",
&&&&&&&&&&&&"email":&"",
&&&&&&&&&&&&"user_id":&1,
&&&&&&&&&&&&"last_login":&"T03:50:40.909685Z"
&&&&&&&&},
&&&&&&&&&&&&"id":&7,
&&&&&&&&&&&&"title":&"test7",
&&&&&&&&&&&&"code":&"test",
&&&&&&&&&&&&"linenos":&false,
&&&&&&&&&&&&"language":&"abap",
&&&&&&&&&&&&"style":&"algol",
&&&&&&&&&&&&"owner":&"admin",
&&&&&&&&&&&&"email":&"",
&&&&&&&&&&&&"user_id":&1,
&&&&&&&&&&&&"last_login":&"T03:50:40.909685Z"
&&&&&&&&},
&&&&&&&&&&&&"id":&6,
&&&&&&&&&&&&"title":&"test6",
&&&&&&&&&&&&"code":&"test",
&&&&&&&&&&&&"linenos":&false,
&&&&&&&&&&&&"language":&"abap",
&&&&&&&&&&&&"style":&"algol",
&&&&&&&&&&&&"owner":&"admin",
&&&&&&&&&&&&"email":&"",
&&&&&&&&&&&&"user_id":&1,
&&&&&&&&&&&&"last_login":&"T03:50:40.909685Z"
&&&&&&&&},
&&&&&&&&&&&&"id":&5,
&&&&&&&&&&&&"title":&"test5",
&&&&&&&&&&&&"code":&"test",
&&&&&&&&&&&&"linenos":&false,
&&&&&&&&&&&&"language":&"abap",
&&&&&&&&&&&&"style":&"algol",
&&&&&&&&&&&&"owner":&"admin",
&&&&&&&&&&&&"email":&"",
&&&&&&&&&&&&"user_id":&1,
&&&&&&&&&&&&"last_login":&"T03:50:40.909685Z"
&&&&&&&&},
&&&&&&&&&&&&"id":&4,
&&&&&&&&&&&&"title":&"test4",
&&&&&&&&&&&&"code":&"test",
&&&&&&&&&&&&"linenos":&false,
&&&&&&&&&&&&"language":&"abap",
&&&&&&&&&&&&"style":&"algol",
&&&&&&&&&&&&"owner":&"admin",
&&&&&&&&&&&&"email":&"",
&&&&&&&&&&&&"user_id":&1,
&&&&&&&&&&&&"last_login":&"T03:50:40.909685Z"
}本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)第三方登录:问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
A表的aa字段值为0,1
B表的bb字段值为no,yes
然后输出A表信息的时候,aa字段0或1,选择输出B表的yes或no。就是输出A表时,aa字段内容需要改为B表的bb字段内容。
想问怎么写,也设置了外键。谢谢了
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
class A(model.Model):
name = model.IntegerFiled(choice=type)
b=model.ForikeyFiled('B',related_name='b_a')
class B(model.Model):
(1,'yes'),
name = model.IntegerFiled(choice=type)
b=name.b.all()
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
if A.字段==1:
return B.objects.filter(字段=yes)
同步到新浪微博
分享到微博?
你好!看起来你挺喜欢这个内容,但是你还没有注册帐号。 当你创建了帐号,我们能准确地追踪你关注的问题,在有新答案或内容的时候收到网页和邮件通知。还能直接向作者咨询更多细节。如果上面的内容有帮助,记得点赞 (????)? 表示感谢。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
扫扫下载 App}

我要回帖

更多关于 python django 安装 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信