Как искать объекты в Django, используя экземпляр choicefield? - PullRequest
0 голосов
/ 04 марта 2019

Это моя модель:

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 User и Professional есть два типа пользователей.Поэтому я хочу сделать запрос в 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, он дает мне список всех пользователей, связанных с этим именем.

Может кто-нибудь предоставить мне подходящее решение для этого.

Спасибо

1 Ответ

0 голосов
/ 04 марта 2019

Решено

На мой взгляд, сделано следующее, и все заработало:

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')
...