添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
豪气的苦瓜  ·  [Android]HttpClient和Ht ...·  1 年前    · 
越狱的凉面  ·  合并对象在 Typescript ...·  1 年前    · 
重情义的甘蔗  ·  EMBO Molecular ...·  1 年前    · 

首先肯定不能使用排列组合的方法,一个个去组合然后去if…else判断查询,下面介绍一个用法:

username = request.POST.get('username')
staff_num = request.POST.get('staff_num')
department = request.POST.getlist('department')
email = request.POST.get('email')
# 多条件查询判断
search = dict()
if username:
  search['username'] = username
  if staff_num:
    search['staff_num'] = staff_num
  if email:
    search['email'] = email
  if not department:
    department = False

以上方法构造出一个条件查询的dict,在ORM查询中这样使用:

user = User.objects.filter(**search).values('staff_num', 'username', 'department', 'email', 'mobile_phone', 'office_telephone','lab_telephone')

注意在filter的参数位置,使用了**search,这样就可以将每一个查询条件动态的去嵌入到查询中了。

如果想要在查询字段中做一些限制,比如使用__contains,这是需要在search字典中的键中添加,例如:search['username__contains'],构造之后的代码:

username = request.POST.get('username')
staff_num = request.POST.get('staff_num')
department = request.POST.getlist('department')
email = request.POST.get('email')
# 多条件查询判断
search = dict()
if username:
  search['username__contains'] = username
  if staff_num:
    search['staff_num__contains'] = staff_num
  if email:
    search['email__contains'] = email
  if not department:
    department = False
user = User.objects.filter(**search).values('staff_num', 'username', 'department', 'email', 'mobile_phone', 'office_telephone','lab_telephone')
                    Django ORM不定项条件查询使用场景在项目中,经常会遇到不定项查询,多个表单中,用户随机选择一个或多个表单进行数据查询,那么在后台处理时,需要怎么处理这些不定项的查询呢?思路分析首先肯定不能使用排列组合的方法,一个个去组合然后去if…else判断查询,下面介绍一个用法:实现过程username = request.POST.get('username')staff_num = request.POST.get('staff_num')department = request.POST
class Publisher(models.Model):
  id = models.AutoField(primary_key=True)
  name = models.CharField(max_length=64, null=False, unique=True)
  def __str__(self):
    return "<Publisher>".format(self.name) 
class Book(models.Model):
平常用ORM大部分使用的是get、filter、exclude这三种能满足基本的需求,有时我们需要满足一些复杂的查询场景,在页面上传不同参数满足查询需求。
ORM 条件查询使用field__结合 condition 的方式来使用的,比如查询包含指定的字符,可以用contains和icontains。
contains和icontains 区别
比如有下面这张表
MyDjango>python manage.py shell
>>> Product.objects.filter
来获取随机记录序列,性能不会比
sample = random.sample(xrange(Record.objects.count()),n)  
result = [Record.objects.all()[i]) for i in sample]
filter(查询条件)
查询表中满足条件的所有数据 eg:Model.objects.filter(name=‘张三’) 查询所有name等于’张三’的数据具体查询条件下方另行介绍
exclude(查询条件)
与filter()逻辑相反。查询表中满足条件之外的所有数
    # 获取查询条件
    start_date = request.POST.get("start_date")
    end_date = request.POST.get("end_date")
    order_type = request.POST.get("order_type")
    order_nature = request.POST.get("order_nature")
    # 定义存储查询条件的字典
    search_dict =
1. 使用缓存:使用 Django 的缓存系统可以大大提高查询的速度。
2. 使用预读:使用 select_related 和 prefetch_related 可以减少额外的查询次数,从而提高效率。
3. 避免 N + 1 查询问题:N + 1 查询是指在遍历每一个数据对象时需要进行一次额外的数据库查询。可以通过使用 select_related 和 prefetch_related 来避免这种情况。
4. 避免使用不必要的查询:在实际使用中,可能会有一些不必要的查询。避免这种情况可以提高效率。
5. 合理使用索引:为经常查询字段创建索引可以提高查询的速度。
以上是一些常见的 Django ORM 优化方法,不同的场景可能需要采取不同的方法,希望这些建议能帮助您优化代码。