Фильтрация объектов Django и отображение данных в HTML - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть веб-приложение Django, для которого я хочу выполнить базовую фильтрацию.По сути, у меня есть сайт в соцсетях, где пользователи регистрируют свои хобби.То, что я хочу сделать, это иметь фильтр, где пользователи могут выбрать, чтобы видеть только мужчин или женщин пользователей на данный момент.Хотя я могу сделать это в Python Shell с помощью следующего кода:

from mainapp.models import Profile
Users = Profile.objects.all().filter(gender = "Male")

У меня проблемы с реализацией этого в Django.Вот мой файл models.py:

class Hobby(models.Model):
    name = models.CharField(max_length=50, default='')

    def __str__(self):
        return self.name

class Profile(models.Model):
    user = models.OneToOneField(
        to=User,
        blank=True,
        null=True,
        on_delete=models.CASCADE
    )
    gender = models.CharField(max_length=6, default='')
    age = models.CharField(max_length=3, default='')
    dob = models.CharField(max_length=10, default='')
    image = models.ImageField(upload_to='profile_images')
    hobbies = models.ManyToManyField(Hobby)

Функция фильтра, которая находится в файле Views.py:

def filter(user):
    other_users = Profile.objects.all()
    filter_results = other_users.filter(gender = "Male")
    context = {
    'appname': appname,
    'usersresults': filter_results
    }
    return render(request, 'mainapp/members.html', context)

Часть URL:

path('filter/', views.filter, name='filter'),

И HTML-код:

<ul>
    {% for user in usersresults %}
        <li>
            <a> {{user}}</a>
        </li>
    {% endfor %}

</ul>

Однако это не работает должным образом и ничего не возвращает на дисплей.Я не уверен, почему это идет не так - любая помощь / совет будет высоко ценится.

1 Ответ

0 голосов
/ 16 декабря 2018

Для моих представлений функций я передаю запрос, а затем все необходимые мне kwargs.Я не пробовал, как у вас, поэтому просто выкладываю это на случай, если это часть проблемы.В этом случае я не думаю, что вам нужно передавать пользователя, поскольку это не переменная в ваших URL-адресах, и вы не используете ее для фильтрации запроса.Вы также можете подумать о переименовании переменных, чтобы сделать его более понятным, если вы также решите фильтровать для пользователей женского пола:

def filter(request):
    template = 'mainapp/members.html'
    male_users = Profile.objects.filter(gender="Male")
    context = {
    'male_users': male_users
    }
    return render(request, template, context)

А затем в шаблоне:

<ul>
    {% for male in male_users %}
        <li>
            <a> {{ male.user }}</a>
        </li>
    {% endfor %}
</ul>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...