Django - ListView, возвращающий список пользователей с заданным тегом в поле тега - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь вернуть список пользователей с определенными навыками и навыками - это TagField (django taggit) в модели CustomUser. Я изо всех сил пытаюсь получить набор запросов прямо в моем ListView (skill_list.html). Я хочу иметь возможность щелкнуть навык, указанный в профиле пользователя (profile.html), а затем вернуть страницу со списком навыков со списком всех пользователей, имеющих этот навык.

models.py:

class CustomUser(AbstractUser):
    objects = CustomUserManager()
    position = models.CharField(max_length =200, null=True, default='', 
    blank=True)
    bio = models.CharField(max_length=400, null=True, default='', 
    blank=True)
    skills = TaggableManager(help_text="A comma-separated list of tags.")

views.py:

class SkillView(ListView):
model = CustomUser
template = 'skill_list.html'
queryset = CustomUser.objects.all()

def get_queryset(self):
    queryset = CustomUser.objects.filter(skills__name__in= 
    [self.kwargs['skill']])
    return queryset

profile.html:

<div class="container-fluid" id="profile_container">

            <div class="container skills">
            {% for skill in user.skills.all %}
                <div class="skill_bubble"><p class="skill_bubble"><a href=" 
{% url 'skills' %}">{{ skill.name }}</a></p></div>
            {% endfor %}
            </div>
        </div>

skill_list.html:

<div class="container">

    {% for user in object_list %}

        <div class="container user_name">
        <p class="profile_name"><a href="{% url 'profile_with_pk' 
pk=user.pk %}">{{ user.first_name }}&nbsp{{ user.last_name }}</a></p>
        <p class="profile_text">{{user.position}}</p>
</div>
</div>

У меня настроен URL-адрес на странице профиля для возврата 'skill_list.html', однако на странице skill_list я получаю ключевую ошибку: значение исключения "skill".

Ответы [ 3 ]

0 голосов
/ 10 января 2019

Тогда почему вы просто не используете поисковый запрос 'Q'. Проверьте это в документах

0 голосов
/ 10 января 2019

Я хочу иметь возможность щелкнуть навык, указанный в профиле пользователя (profile.html), а затем вернуть страницу со списком навыков

В этом случае URL-адреса должны включать в себя навык, например, /skills/python/ или /skills/sql/.

Вы можете сделать это, изменив URL на что-то вроде:

path('skills/<slug:skill>', views.SkillView.as_view(), name='skills')

Теперь self.kwargs['skill'] будет работать в методе SkillView.get_queryset.

Теперь вам нужно включить навык в тег URL, например:

{% url 'skills' skill %}

Наконец, поскольку в вашем списке используется только один элемент,

queryset = CustomUser.objects.filter(skills__name__in=[self.kwargs['skill']])

Вы можете удалить __in и изменить запрос на:

queryset = CustomUser.objects.filter(skills__name=self.kwargs['skill'])
0 голосов
/ 10 января 2019

Я думаю, что должно быть: request.user вместо user в profile.html

...