Python Django中的访问字段

Python Django中的访问字段,python,django,field,conditional-statements,Python,Django,Field,Conditional Statements,问题是,当我试图比较两个属性时,当我们在shell中检查它们时,它们是相同的,但条件是不完整的,我不知道为什么。我的意思是这样的条件:{%if c.author=member.name%} 观点: cvs = Cv.objects.all() cv = Cv.objects.filter(author = request.user) per = Person.objects.all() gr = Group.objects.filter(members__name

问题是,当我试图比较两个属性时,当我们在shell中检查它们时,它们是相同的,但条件是不完整的,我不知道为什么。我的意思是这样的条件:{%if c.author=member.name%}

观点:

    cvs = Cv.objects.all()
    cv = Cv.objects.filter(author = request.user)
    per = Person.objects.all()
    gr = Group.objects.filter(members__name=request.user)

    for c in cvs:
        print c.author

    mem = Membership.objects.all()
    form = GroupForm()


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

    return render(request, 'groups.html', context)
models.py:

class Cv(models.Model):
    author = models.ForeignKey('auth.User')
    name = models.CharField(max_length=25, null = True)
    surname = models.CharField(max_length=25, null = True)
    address = models.CharField(max_length=100, blank=True)
    telephone = models.IntegerField()
    birth_date = models.DateField(blank=True, null=True)
    email = models.EmailField(max_length=50, null=True)
    skills = models.TextField(null=True)
    specialization = models.CharField(max_length=30, blank=True, null=True)
    interests = models.TextField(blank=True, null=True)
    summary = models.TextField(blank=True, null=True)
    thumbnail = models.FileField(upload_to=get_upload_file_name, blank=True)


    @property
    def age(self):
        return int((datetime.datetime.now().date() - self.birth_date).days / 365.25 )

    def zapisz(self):
        self.save()

    def __str__(self):
        return self.surname




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')

     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)
groups.html:

{% block profile %}


      {% for g in gr %}
        <div class="jumbotron">
          <p><b>GROUP:</b> {{g.name}}</p>
          {% for c in cvs %}
            {% for member in g.members.all %}
              {% if c.author = member.name %}
                {{member.name}}
              {% endif %}
            {% endfor %}
          {% endfor %}
        </div>
      {% endfor %}



{% endblock %}
{%block profile%}
{gr%中g的%s}
组:{{g.name}

{cvs%中的c的%s} {%g.members.all%} {%if c.author=member.name%} {{member.name} {%endif%} {%endfor%} {%endfor%} {%endfor%} {%endblock%}

谢谢你的回答

要测试Django模板中的相等性,需要使用相等运算符
=
,如下所示:

 {% if c.author == member.name %}
     {{member.name}}
 {% endif %}

首先,请给出变量的描述性名称。“c”和“gr”是不可能理解的

其次,你根本没有比较正确的东西
c.author
是用户的一个实例
member
是Person和
member的实例。name
是字符串。将用户实例与字符串进行比较总是失败的


最后,这整件事效率极低,而且可能完全没有必要。三个嵌套for循环意味着大量的迭代。如果您可以解释输出需要是什么,那么我们几乎可以肯定地找到更好的方法。

您应该将c.name与member.name或c.author.first\u name与member.name进行比较。所以这两个变量都是字符串。

仍然是相同的输出-无。只有组一直在显示,仅此而已:/Output
{{{c.author}}
{{member.name}
在平等性测试之上,以可视化它们是什么,如果它们相等,我会像这样测试它们:{c.author}第一个输出:{c.author}

{%endfor%}{%forg.members.all%}第二个输出:{{member.name}

{%endfor%}'并且输出是:'第一个输出:zahi第一个输出:damian第一个输出:测试第一个输出:kacper第二个输出:damian第二个输出:kacper',所以当我指的是“kacper”时有相同的结果所以不会有输出,因为
zahi!=damian
damian!=kacper
当然,但是循环可以走得更远一些,在我看来kacper==kacper是可能的。当我得到这个代码:{%for g in gr%}组:{{g.name}

{%for g.members.all%}成员:{{member.name}

{%endfor%}{%endfor%}{%endfor%}。我得到了我想要的,我的意思是,我想显示所有组,然后在其他每个组中显示所有包含的用户。我用上面的代码得到了这个,但我只得到了用户的姓名-cv.authors-然后他们是OryGinal,他们不能被替代。但我想让他们链接到他们的个人资料。例如:成员:

。这就是我为什么“我只是在这里使用Cv模型。不起作用,因为如果我们选择c.name,我们会得到'Damian',member.name是'Damian',所以它们不一样。你输入的两种方法都不起作用。输出为空。你可以使用{%c.name | upper==member.name | upper%)(未尝试)