Почему django queryset позволяет мне искать пользователей только по внешнему ключу (Number), а не по имени пользователя?

<
class RequestSearchUser(LoginRequiredMixin, ListView):
    model = FriendList
    form_class = SearchUserForm
    template_name = 'wallet/request_search_user_form.html'

    def get_queryset(self):
        try:
            username = self.kwargs['search_user']
        except:
            username = ''
        if username != '':
            object_list = self.model.objects.filter(user=username)
        else:
            object_list = self.model.objects.all()
        return object_list

    def get_context_data(self, **kwargs):
        context = super(RequestSearchUser, self).get_context_data(**kwargs)
        query = self.request.GET.get("search_user")
        context['user'] = self.request.user

        if query:
            queryset = (Q(user=query))
            search_user = FriendList.objects.filter(queryset)
            if not search_user:
                messages.error(self.request, 'No user found.')
        else:
            search_user = []

        context['search_user'] = search_user
        context['nbar'] = 'request'

        return context

Вот моя поисковая форма.py


class SearchUserForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ('username',)

    def clean_username(self):
        username = self.cleaned_data['username'].strip()
        return username


Здесь находится Html форма

  <div class="blog_details">
                            <h2>Request Money</h2><hr>

                            <form class="form-contact contact_form" action="{% url 'wallet:request' %}" method="get" novalidate="novalidate">
                                <div class="row">
                                    <div class="col-12">
                                        {% if messages %}
                                            {% for message in messages %}
                                                <div class="alert alert-danger" role="alert">
                                                    {{ message }}
                                                </div>
                                            {% endfor %}
                                        {% endif %}
                                    </div>
                                    <div class="col-12">
                                        {% for search_user in search_user %}
                                            {% if search_user == request.user %}
                                                <div class="alert alert-danger" role="alert">
                                                    Cannot input your username.
                                                </div>
                                            {% else %}
                                                <meta http-equiv="refresh" content="0; url={% url 'wallet:request_money' search_user.id %}" />
                                            {% endif %}
                                        {% endfor %}
                                    </div>
                                    <div class="col-12">
                                        <div class="form-group">
                                        <input class="form-control" name="search_user" id="search_user" type="text" maxlength="45"
                                               onfocus="this.placeholder = ''" onblur="this.placeholder = 'Username'" placeholder="Username" required/>
                                        </div>
                                    </div>
                                </div>
                                <div class="form-group mt-3">
                                    <button type="submit" class="button button-contactForm boxed-btn">Search </button>
                                </div>
                            </form>
                        </div>
                    </article>

Ошибка здесь

object_list = self.model.objects.filter(user=username)

и здесь

queryset = (Q(user=query))

Если вы храните имя пользователя в поле username, вы должны фильтровать по user__username

object_list = self.model.objects.filter(user__username=username)
queryset = (Q(user__username=query))

Это хорошо описано здесь Много к одному

Вы можете использовать contains, тогда ваш запрос будет выглядеть следующим образом

if query:
   queryset = (
        Q(user__username__contains=query)|
        Q(user__first_name__contains=query)|
        Q(user__email__contains=query)
   )
   search_user = FriendList.objects.filter(queryset)
   if not search_user:
      messages.error(self.request, 'No user found.')
Вернуться на верх