django框架中查询数据(与、或关系和其他条件混用)

filters = {"del_flag": 0}
if params.get("start_time", ""):
	filters.update({"create_datetime__gte": params.get("start_time", "")})
if params.get("end_time", ""):
	filters.update({"create_datetime__lte": params.get("end_time", "")})

offset = (int(page) - 1) * int(num)
num = offset + int(num)
try:
	if int(cur_user.id) in [1,2] or cur_user.username in ["admin", "superadmin"]:
		querys = XXXX.objects.filter(**filters).all()[offset:int(num)]
		total = XXXX.objects.filter(**filters).count()
	else:
		sseat = YYYYY(cur_user.id)
		srole = YYYYY2(cur_user.id)
		
		if len(sseat["uid"]) > 0 and len(srole["uid"]) > 0:
			# Q(see_by_seat=1)&Q(user_ids__in=sseat["uid"])
			# Q(see_by_role=1)&Q(user_ids__in=srole["uid"])
			tmp = (Q(Q(see_by_seat=1)&Q(user_ids__in=sseat["uid"]))|Q(Q(see_by_role=1)&Q(user_ids__in=srole["uid"])))
			querys = XXXX.objects.filter(**filters).filter(tmp).all()[offset:int(num)]
			total = XXXX.objects.filter(**filters).filter(tmp).count()
			#print(querys.query)
		elif len(sseat["uid"]) > 0 and len(srole["uid"]) == 0: 
			filters.update({"see_by_seat": 1})
			filters.update({"user_ids__in": sseat["uid"]})
			querys = XXXX.objects.filter(**filters).all()[offset:int(num)]
			total = XXXX.objects.filter(**filters).count()
			#print(querys.query)
		elif len(sseat["uid"]) == 0 and len(srole["uid"]) > 0: 
			filters.update({"see_by_role": 1})
			filters.update({"user_ids__in": srole["uid"]}) 
			querys = XXXX.objects.filter(**filters).all()[offset:int(num)]
			total = XXXX.objects.filter(**filters).count() 
			#print(querys.query)                    
		else:
			filters.update({"user_ids__in": tuple([cur_user.id])})
			querys = XXXX.objects.filter(**filters).all()[offset:int(num)]
			total = XXXX.objects.filter(**filters).count()
			#print(querys.query)


版权声明:本文为dl425134845原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。