我有一个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)
Ulls部分:
path('filter/', views.filter, name='filter'),
以及HTML代码:
<ul>
{% for user in usersresults %}
<li>
<a> {{user}}</a>
</li>
{% endfor %}
</ul>
但是,这不能按预期方式工作,也不会向显示屏返回任何内容。我不确定为什么会出错-我们将不胜感激任何帮助/建议。
答案 0 :(得分:0)
对于我的函数视图,我传递一个请求,然后再传递任何需要的参数。我没有尝试过您所拥有的方法,因此只需将其放到外面,以防它成为问题的一部分。在这种情况下,我认为您不需要传递用户,因为它不是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>