Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用带有两个查询集的django模板筛选问题-django_Python_Django_Django Forms_Django Templates - Fatal编程技术网

Python 使用带有两个查询集的django模板筛选问题-django

Python 使用带有两个查询集的django模板筛选问题-django,python,django,django-forms,django-templates,Python,Django,Django Forms,Django Templates,我有一个django模板,我想用它来过滤查询集中的对象。我有一个要添加新成员的组。我有一个成员对象列表,用于跟踪创建组时添加的组成员。成员是通过显示用户朋友列表并在其姓名旁边显示复选框而添加的。现在,我想显示一个尚未成为该组成员的朋友列表,然后将他们添加到该组(如果选中)。我在html模板过滤系统中遇到了一个问题,我创建该系统只是为了显示尚未成为成员的好友列表。。。有人能帮我弄清楚吗。我有以下所有代码: 以下是传递的查询: # grab the group members members = M

我有一个django模板,我想用它来过滤查询集中的对象。我有一个要添加新成员的组。我有一个成员对象列表,用于跟踪创建组时添加的组成员。成员是通过显示用户朋友列表并在其姓名旁边显示复选框而添加的。现在,我想显示一个尚未成为该组成员的朋友列表,然后将他们添加到该组(如果选中)。我在html模板过滤系统中遇到了一个问题,我创建该系统只是为了显示尚未成为成员的好友列表。。。有人能帮我弄清楚吗。我有以下所有代码:

以下是传递的查询:

# 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)]
    
  • 将HTML模板更改为此。检查
    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 %}