1、related_name django
外键使用
2、指定数据库的表格加入model里面
python manage.py inspectdb CASN CASD > DataWebApp/models.py
3、获取IMAGE_VERSION接口
(1) 序列化
序列化一定要有字段名,因此传入的参数一定是跟这里指定的一致:
Image_Version_list = serializers.ListField(child=serializers.CharField(max_length=10))
(2) 修改view文件返回json文件
def image_version_list(request):
if request.method == 'GET':
data = {'Image_Version_list': list(Products.objects.all().values_list("prod_id", flat=True))}
Image_Version_list = IMAGEVERSIONSerializer(data)
return Response(Image_Version_list.data)
2、查询接口:
(1)序列化文件中的字段应该是返回的字段,而且名儿都不一样:
考虑:1、汇总的语句可以指定名称:可以哦
>>> Book.objects.aggregate(average_price=Avg('price'))
{'average_price': 34.35}
2、groupby : value但是这个需要都写上
from django.db.models import Count
Members.objects.values('designation').annotate(dcount=Count('designation'))
在最后加上distinct()用来去除重复项
相当于
SELECT designation, COUNT(designation) AS dcount
FROM members GROUP BY designation
3、case when:
>>> Client.objects.aggregate(
... regular=Count('pk', filter=Q(account_type=Client.REGULAR)),
... gold=Count('pk', filter=Q(account_type=Client.GOLD)),
... platinum=Count('pk', filter=Q(account_type=Client.PLATINUM)),
... )
{'regular': 2, 'gold': 1, 'platinum': 3}
相当于
SELECT count(CASE WHEN account_type=1 THEN id ELSE null) as regular,
count(CASE WHEN account_type=2 THEN id ELSE null) as gold,
count(CASE WHEN account_type=3 THEN id ELSE null) as platinum
FROM clients;
(2)考虑request.data的问题
GET
get请求中参数都会以http://xxx.com/api/getjson?param1=asdf¶m2=123
这样的形式拼接在url后面.
在request对象中
request.query_params 中可以获取?param1=32¶m2=23形式的参数.
request.query_params 返回的数据类型为QueryDict
QueryDict转为普通python字典. query_params.dict()即可
也可以:
request_data = request.GET.get('param1', '1001')
(3)逻辑问题了:
1、筛选出符合日期的,默认为当天
python获取当天日期:
>>> import datetime
>>> today=datetime.date.today()
date = request.GET.get('date', today)
all_day_data = data.object.all().filte(Q(count_hour_contains=date))
2、按照各种筛选条件进行计算
如果是有,则直接filter and
如果是默认值,Q_list.append()这种想法可以的
#获取值
feature_list = ['version', 'source', 'H265_H264', 'category', 'enc_version', 'transcode_mode']
version=request.GET.get('version', '')
source=request.GET.get('source', '')
H265_H264=request.GET.get('H265_H264', '')
category=request.GET.get('category', '')
enc_version=request.GET.get('enc_version', '')
transcode_mode=request.GET.get('transcode_mode', '')
Q_list = []
#命令筛选
if version:
Q_list.append(Q(IMAGE_VERSION=version))
if source:
Q_list.append(Q(IMAGE_VERSION=source))
if H265_H264:
Q_list.append(Q(IMAGE_VERSION=H265_H264))
if category:
Q_list.append(Q(IMAGE_VERSION=category))
if enc_version:
Q_list.append(Q(IMAGE_VERSION=enc_version))
if transcode_mode:
Q_list.append(Q(IMAGE_VERSION=transcode_mode))
>>> Question.objects.filter(reduce(operator.or_, Q_list))
统计数据:
#总数:
all_day.objects.value('count_hour','trans_count', 'success_count', 'trans_efficiency')aggregate(
trans_count=Sum(count)
success_count=Sum(count, filter=Q(error_code=0))
succ_rate = Sum(count, filter=Q(error_code=0))/Sum(count)
trans_efficiency=Sum(total_trans_duration)/Sum(total_inputfile_duration)
)