【问题标题】:Wrong iteration in ForLoops in Django with Querysets带有查询集的 Django 中的 For 循环中的错误迭代
【发布时间】:2016-03-22 01:40:20
【问题描述】:

views.py;

    cvs = Cv.objects.all()
    cv = Cv.objects.filter(author = request.user)
    per = Person.objects.all()
    gr = Group.objects.filter(members__name=request.user)
    perr = Person.objects.filter(name=request.user)
    mem = Membership.objects.filter(group = gr, person = perr)


    form = GroupForm()


    context = {
        'gr': gr,
        'per':per,
        'mem':mem,
        'form': form,
        'cvs':cvs,
        'cv':cv,

    }

    return render(request, 'groups.html', context)

models.py:

class Person(models.Model):
    name = models.CharField(max_length=128)

    def __str__(self):              # __unicode__ on Python 2
        return self.name


class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(Person, through='Membership')
    description = models.TextField(max_length=350)

    def __str__(self):              # __unicode__ on Python 2
        return self.name


class Membership(models.Model):
    person = models.ForeignKey(Person)
    leader = models.BooleanField(default=False)
    group = models.ForeignKey(Group)
    role = models.CharField(max_length=50)

模板.html:

{% for z in mem %}
   <div class="jumbotron">
     <div class="jumbo2">
        <form method="POST" class="post-form"> {% csrf_token %}
            <p id="name"><b>Groups name:</b> {{z.group}}</p><br>

                {% for member in z.group.members.all %}

                      <p><b>Member:</b> {{member.name}} 

                        {% if z.person.name == member.name %}

                      - {{z.role}}</p>

                        {% endif %}                                         

                {% endfor %}

            </form>

         </div>
       </div> 

  {% endfor %}

当我创建组时,我的角色是“团队负责人”,当我将某人添加到组时,他的角色是“Noob”。我想显示该组的所有成员及其角色。问题是:我的实际输出是:

damian - Team leader
test                   <- and no role, but should be "Noob"

我想得到什么:

damian - Team Leader
test - Noob

有人知道如何解决这个问题吗? 感谢您的帮助!

【问题讨论】:

    标签: python django for-loop django-queryset


    【解决方案1】:

    您的代码有点难以理解,因为变量名称很神秘,例如 z

    问题似乎是您仅在z.person.name == member.name 时才打印角色。

    如果您从循环中删除该条件,那么它将显示组中的所有角色,而不仅仅是一个。但要做到这一点,您需要通过member 对象而不是z 对象来查找角色

    【讨论】:

    • 但是怎么做呢?我无法将属性“角色”添加到模型中的成员。或者我没听懂你的意思。
    • 抱歉,我对成员变量名称和成员模型感到困惑。看这里:stackoverflow.com/questions/3368442/… 它看起来与您的问题非常相似,并且可能是比我能提供的更好的答案。
    猜你喜欢
    • 2012-05-10
    • 2018-09-10
    • 2013-03-08
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多