首页 > 解决方案 > 如何使用choicefield的实例在django中搜索对象?

问题描述

这是我的模型:

class Profile(models.Model):
    date = models.DateTimeField(auto_now_add=True)
    full_name = models.CharField(max_length=32,blank=True)
    user_types = (
        ('Business User','Business User'),
        ('Professional','Professional'),
    )
    user_type = models.CharField(max_length=32,choices=user_types,default='Business User',blank=False)
    user= models.OneToOneField(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
    e_mail = models.EmailField(max_length=70,blank=True)

如您所见,我的Profile模型中有两种类型的用户Business UserProfessional. 所以我想在 django 中进行查询,它只会搜索Professional用户。

我在我的观点中尝试过这个:

    query = request.GET.get('q')

    if query:
        if Profile.objects.filter(user_type__icontains='Professional'):
            result = Profile.objects.filter(Q(user__username__icontains=query) | Q(e_mail__icontains=query) | Q(full_name__icontains=query))
    else:
       result = Profile.objects.filter(user_type__icontains='Professional').order_by('id')

在我的模板中:

       <form method='GET' class="form-horizontal" id="search-form" action="{% url 'userprofile:search' %}">

        <div class="col-lg-8 col-md-8 col-sm-8 col-xs-6">
          <input  class="form-control" name="q" value="{{request.GET.q}}" placeholder="Search">

        </div>

      <div >

        <span class="input-group-btn">
          <button type="submit" class="btn btn-info pull-right">Go</button>
        </span>

      </div>


    </form>

但是当我搜索Professional用户时,它会给我与该名称关联的所有用户的列表。

谁能为此提供合适的解决方案。

谢谢

标签: djangodjango-modelsdjango-views

解决方案


解决了

在我看来完成了以下操作并且它有效:

user_profile = Profile.objects.filter(user_type__icontains='Professional')

query = request.GET.get('q')

if query:
    result = user_profile.filter(Q(user__username__icontains=query) | Q(e_mail__icontains=query) | Q(full_name__icontains=query))
else:
    result = Profile.objects.filter(user_type__icontains='Professional').order_by('id')

推荐阅读