Как фильтровать по любой букве, набранной в автозаполнении (Dango) - PullRequest
0 голосов
/ 09 ноября 2018

Процесс автозаполнения в Django работает нормально.

Моя проблема в том, что я хочу фильтровать не только по первой букве в поле модели first_name, но и по любой букве, которую может иметь имя_первой.

Например, представьте, что я сохранил в столбце first_name приведенные ниже значения в моей таблице профиля:

Louna Лола Линда Мола Rouna

При наборе L поиск возвращает Louna, Lola, Linda.

Я хочу, набрав na поиск, чтобы вернуть Lou na и Rou na

Есть идеи?

Мой класс:

class ProfileAutocomplete(autocomplete.Select2QuerySetView):
        def get_queryset(self):
            # Don't forget to filter out results depending on the visitor !
            # if not self.request.user.is_authenticated():
            #     return Profile.objects.none()
            qs = Profile.objects.all()
            if self.q:
                qs = qs.filter(first_name__istartswith=self.q)

            return qs

Моя модель:

class Profile(models.Model):
        first_name = models.CharField(max_length=100)
        last_name = models.CharField(max_length=100)
        created_date = models.DateTimeField(default=datetime.datetime.now)

        def __str__(self):
            return self.first_name+ " " +self.last_name

Моя форма:

from django import forms

    from .models import Profile
    from dal import autocomplete
    from django.forms import ModelChoiceField



    class ProfileForm(forms.ModelForm):
        first_name = forms.ModelChoiceField(queryset=Profile.objects.all(),widget=autocomplete.ModelSelect2(url='profile-autocomplete'))


        class Meta:
                model = Profile
                fields = ('__all__')

Мой шаблон:

{% load static %}

{% block content %}
<div>
    <form action="" method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <input type="submit" />
    </form>
</div>
{% endblock %}

{% block footer %}
<script type="text/javascript" src="{% static 'admin/js/vendor/jquery/jquery.js' %}"></script>

{{ form.media }}
{% endblock %}

1 Ответ

0 голосов
/ 09 ноября 2018

Вы, похоже, ищете contains или, возможно, icontains. Это чувствительный к регистру и нечувствительный к регистру тест сдерживания.

Полученный код выглядит следующим образом:

qs = qs.filter(first_name__contains=self.q)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...