【问题标题】:Access fields in DjangoDjango 中的访问字段
【发布时间】:2016-06-27 18:00:07
【问题描述】:

问题是,当我尝试比较两个在 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 %}

感谢您的回答!

【问题讨论】:

    标签: python django field conditional-statements


    【解决方案1】:

    首先,请为您的变量提供描述性名称。 "c" 和 "gr" 无法理解。

    其次,您根本没有比较正确的事物。 c.author 是用户的一个实例; member 是 Person 的一个实例,member.name 是一个字符串。将 User 实例与字符串进行比较总是会失败。

    最后,整个事情非常效率低下 - 并且可能完全没有必要。三个嵌套的 for 循环意味着大量的迭代。如果您可以解释输出需要是什么,那么我们几乎可以肯定会想出更好的方法。

    【讨论】:

    • 好吧,当我得到这个代码时: {% for g in gr %}

      GROUP: {{g.name} }

      {% for member in g.members.all %}

      Member: {{member.name}}

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

      会员: {{cv.name}} {{cv.姓}}

      。这就是为什么我在这里只使用 Cv 模型。
    【解决方案2】:

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

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

    【讨论】:

    • 仍然是相同的输出 - 没有。只有组一直在显示,仅此而已:/
    • 在相等性测试上方输出{{ c.author }}{{ member.name }},以可视化它们是什么以及它们是否相等
    • 是的,我像这样测试它们:'{% for c in cvs %}

      第一个输出:{{c.author}}

      {% endfor %} {% for member in g.members.all %}

      第二个输出:{{member.name}}

      {% endfor %}' 输出是:'第一个输出:zahi 第一个输出:damian 第一个输出:test First输出:kacper 第二个输出:damian 第二个输出:kacper' 所以当我的意思是名字“kacper”时也有相同的
    • 所以不会有输出因为zahi != damiandamian != kacper
    • 当然可以,但是循环可以走得更远,我认为 kacper == kacper 是可能的。
    【解决方案3】:

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

    【讨论】:

    • 没用,因为如果我们选择 c.name,我们会得到 'Damian',而 member.name 是 'damian',所以它们不一样。您输入的两种方法均无效。输出为空
    • 你能用 {% c.name|upper == member.name|upper %) (未尝试)
    猜你喜欢
    • 2011-01-01
    • 2012-08-23
    • 2021-09-15
    • 2018-11-05
    • 2013-03-16
    • 2020-05-25
    • 1970-01-01
    • 2023-03-13
    • 2019-08-08
    相关资源
    最近更新 更多