Python Django-ListView返回标记字段中具有给定标记的用户列表
我试图返回一个具有特定技能的用户列表,技能是CustomUser模型中的标记字段(django-taggit)。我正在努力在我的ListView(skill_list.html)中获得正确的查询集。我希望能够单击用户配置文件(profile.html)上列出的技能,然后让它返回技能列表页面,其中包含所有拥有该技能的用户的列表 models.py:Python Django-ListView返回标记字段中具有给定标记的用户列表,python,django,django-models,Python,Django,Django Models,我试图返回一个具有特定技能的用户列表,技能是CustomUser模型中的标记字段(django-taggit)。我正在努力在我的ListView(skill_list.html)中获得正确的查询集。我希望能够单击用户配置文件(profile.html)上列出的技能,然后让它返回技能列表页面,其中包含所有拥有该技能的用户的列表 models.py: class CustomUser(AbstractUser): objects = CustomUserManager() posit
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>
{user.skills.all%中的技能为%}
{%endfor%}
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 }} {{ user.last_name }}</a></p>
<p class="profile_text">{{user.position}}</p>
</div>
</div>
{对象列表%中的用户为%0}
{{user.position}
我在配置文件页面上设置了url以返回“skill\u list.html”,但是在skill\u list页面上我得到一个关键错误:异常值“skill”。我认为应该是:
请求。user
而不是profile.html中的user
,那么为什么不使用“Q”搜索查询呢。在文件里查一下
我希望能够单击用户配置文件(profile.html)上列出的技能,然后让它返回技能列表页面
在这种情况下,URL需要包含技能,例如/skills/python/
或/skills/sql/
您可以通过将URL更改为以下内容来完成此操作:
path('skills/<slug:skill>', views.SkillView.as_view(), name='skills')
最后,由于您只使用列表中的一项
queryset = CustomUser.objects.filter(skills__name__in=[self.kwargs['skill']])
您可以删除中的\u并将查询更改为:
queryset = CustomUser.objects.filter(skills__name=self.kwargs['skill'])
不,当我将queryset更改为其他内容时,该模板工作正常。问题在于获取正确的查询集。我认为问题在于这一行:queryset=CustomUser.objects.filter(skills\uu name\uu in=[self.kwargs['skill'])您没有显示您的URL模式。要使self.kwargs['skill']
起作用,您需要在URL中包含该技能。您的意思是要包含customuser模型的pk,以便我可以访问与之相关的技能吗?我的url是:path('skills/',views.SkillView.as_view(),name='skills')。我知道如何对模型实例执行此操作,但我现在有点困惑,因为这不是一个模型实例,而是一个包含许多条目的模型字段。您需要一个具有此技能的用户列表,因此需要在URL中包含此技能,而不是用户的PK。请看下面我的答案。谢谢你的帮助!现在我没有收到错误,但是列表是空的。您知道我是否应该引用skill_list.html模板中的查询集,如:{%for user in object_list%}?{%for user in object_list%}
。尝试向queryset添加一些打印/日志记录,以确保它返回结果,因此我确定问题不在于如何在模板中调用queryset。行:queryset=CustomUser.objects.filter(skills\uu name=self.kwargs['skill'])找不到正确的技能名称。这就是我应该在profile.html中引用技能的方式吗:?是的,您需要在{%url%}
标记中包含该技能,但我不熟悉django taggit,所以我不确定正确的用法是{%url'skills'skill.name%}
还是稍有不同的用法。就是这样!非常感谢
queryset = CustomUser.objects.filter(skills__name=self.kwargs['skill'])