Python 使用带有两个查询集的django模板筛选问题-django
我有一个django模板,我想用它来过滤查询集中的对象。我有一个要添加新成员的组。我有一个成员对象列表,用于跟踪创建组时添加的组成员。成员是通过显示用户朋友列表并在其姓名旁边显示复选框而添加的。现在,我想显示一个尚未成为该组成员的朋友列表,然后将他们添加到该组(如果选中)。我在html模板过滤系统中遇到了一个问题,我创建该系统只是为了显示尚未成为成员的好友列表。。。有人能帮我弄清楚吗。我有以下所有代码: 以下是传递的查询:Python 使用带有两个查询集的django模板筛选问题-django,python,django,django-forms,django-templates,Python,Django,Django Forms,Django Templates,我有一个django模板,我想用它来过滤查询集中的对象。我有一个要添加新成员的组。我有一个成员对象列表,用于跟踪创建组时添加的组成员。成员是通过显示用户朋友列表并在其姓名旁边显示复选框而添加的。现在,我想显示一个尚未成为该组成员的朋友列表,然后将他们添加到该组(如果选中)。我在html模板过滤系统中遇到了一个问题,我创建该系统只是为了显示尚未成为成员的好友列表。。。有人能帮我弄清楚吗。我有以下所有代码: 以下是传递的查询: # grab the group members members = M
# grab the group members
members = Member.objects.filter(group = group).all()
# grab all of the friends fo the logged in user
friender = Friend.objects.filter(user = user.username).all()
friended = Friend.objects.filter(friend = user).all()
friends = friender | friended
# the required parameters for this form
parameters = {
'friends':friends,
'members':members,
'group':group,
'message':message,
}
return render(request, 'groups/add_members.html', parameters)
下面是html模板:
{% extends "general/header.html" %}
{% block content %}
<h1>Create Group</h1>
<p>{{ message }}</p>
<form method="POST">
{% csrf_token %}
{% for friend in friends %}
{% for member in members %}
{% if member.user.username != friend.friend.username %}
{% if member.user.username != friend.user %}
{% if friend.user == user.username %}
<p>
{{ friend.friend.username }}
<input type="checkbox" name="{{friend.friend.username}}" value="{{friend.friend.username}}">
</p>
{% endif %}
{% if friend.friend == user %}
<p>
{{ friend.user }}
<input type="checkbox" name="{{friend.user}}" value="{{friend.user}}">
</p>
{% endif %}
{% endif %}
{% endif %}
{% endfor %}
{% endfor %}
<input type="submit" name="submit" value="submit">
</form>
{% endblock %}
以下是正在显示的内容:
以下是模型:
# the following are models for accepted friend requests
class Friend(models.Model):
user = models.CharField(max_length=22, default='current user')
friend = models.ForeignKey(User, on_delete=models.CASCADE, default=1)
created = models.DateTimeField(auto_now_add=True)
class UserActivity(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
account = models.CharField(max_length=150, null=True)
expense = models.ForeignKey(Expense, null=True, on_delete=models.CASCADE)
request = models.ForeignKey(Request, null=True, on_delete=models.CASCADE)
description = models.CharField(max_length=200, default='some action')
reference = models.IntegerField(default = '101', null = True)
category = models.IntegerField(default=1)
status = models.SmallIntegerField(default=1)
# 1 = unseen
# 2 = seen
created = models.DateTimeField(auto_now_add=True)
# Member stores all of the different members to each of the created groups
class Member(models.Model):
user = models.ForeignKey(User, default=1, on_delete=models.CASCADE)
group = models.ForeignKey(Group, default=1 , on_delete=models.CASCADE)
status = models.SmallIntegerField(default=1)
# 1 = member
# 2 - host
created = models.DateTimeField(auto_now_add=True)
没有模型很难进行调试,但您可以像这样简化代码:
members = [member.user.username for member in Member.objects.filter(group = group)]
friend
是否不在members
列表中,如果True
则显示他:
{% extends "general/header.html" %}
{% block content %}
<h1>Create Group</h1>
<p>{{ message }}</p>
<form method="POST">
{% csrf_token %}
{% for friend in friends %}
{% if friend.friend.username not in members %}
<p>
{{ friend.friend.username }}
<input type="checkbox" name="{{friend.friend.username}}" value="{{ friend.friend.username }}">
</p>
{% endif %}
{% if friend.user not in members %}
<p>
{{ friend.user }}
<input type="checkbox" name="{{friend.user}}" value="{{ friend.user }}">
</p>
{% endif %}
{% endfor %}
<input type="submit" name="submit" value="submit">
</form>
{% endblock %}
{%extends“general/header.html”%}
{%block content%}
创建组
{{message}}
{%csrf_令牌%}
{%为好友中的好友%}
{%如果friend.friend.username不在成员%}
{{friend.friend.username}
{%endif%}
{%if friend.user不在成员%}
{{friend.user}
{%endif%}
{%endfor%}
{%endblock%}
- 过滤后无需使用
。你已经在过滤了,根据定义,这并不是全部.all()
- 尽可能避免嵌套循环和嵌套ifs。有时你无法避免它们李>
{% extends "general/header.html" %}
{% block content %}
<h1>Create Group</h1>
<p>{{ message }}</p>
<form method="POST">
{% csrf_token %}
{% for friend in friends %}
{% if friend.friend.username not in members %}
<p>
{{ friend.friend.username }}
<input type="checkbox" name="{{friend.friend.username}}" value="{{ friend.friend.username }}">
</p>
{% endif %}
{% if friend.user not in members %}
<p>
{{ friend.user }}
<input type="checkbox" name="{{friend.user}}" value="{{ friend.user }}">
</p>
{% endif %}
{% endfor %}
<input type="submit" name="submit" value="submit">
</form>
{% endblock %}