Python Django中的访问字段
问题是,当我试图比较两个属性时,当我们在shell中检查它们时,它们是相同的,但条件是不完整的,我不知道为什么。我的意思是这样的条件:{%if c.author=member.name%} 观点: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
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%)(未尝试)