【问题标题】:Why _set.all dont work in tempale?为什么 _set.all 在寺庙里不起作用?
【发布时间】:2017-10-23 18:48:07
【问题描述】:

我有 3 个相互连接的模型。 GroupRequirementType --> GroupRequirement --> Requirement。我想在模板中显示所有要求。下一个代码只显示 GroupRequirementType 对象。看来我对_set.all 有问题。怎么了?

models.py:

class GroupRequirementType(models.Model):
    name = models.CharField(_('Name'), max_length=250)

class GroupRequirement(models.Model):
    group_requirement_type = models.ForeignKey(GroupRequirementType, on_delete=models.CASCADE)
    name = models.CharField(_('Name'), max_length=250)

class Requirement(models.Model):
    group_requirement = models.ForeignKey(GroupRequirement, on_delete=models.CASCADE)
    name = models.CharField(_('Name'), max_length=250)

模板:

{% for group_requirement_type in group_requirement_types %}
   {{ group_requirement_type }}

   {% for group_requirement in group_requirement_type.group_requirement_set.all %} <!--DONT WORK. WHY?-->
      {{ group_requirement }}

      {% for requirement in group_requirement.requirement_set.all %}
         {{ requirement }}
      {% endfor %}

   {% endfor %}

{% endfor %}

【问题讨论】:

  • 我不记得 Django 是否通过添加下划线自动将 CamelCase 转换为小写。 grouprequirement_set.all 有效吗?
  • 谢谢!你是对的。 grouprequirement_set.all 有效。请再次发布您的答案,但不要发表评论。我会将其标记为正确答案。

标签: python html django python-3.x django-1.10


【解决方案1】:

看起来 Django 在将 CamelCase 模型名称转换为小写时不会自动添加下划线。 grouprequirement_set.all 有效。

【讨论】:

    【解决方案2】:

    我强烈建议在你的模型声明中使用 Django ForeignKey related_name 属性,这使得反向关系操作更容易:https://docs.djangoproject.com/en/1.11/ref/models/fields/#django.db.models.ForeignKey.related_name

    在你的情况下,它会变成类似

    models.py:

    class GroupRequirementType(models.Model):
        name = models.CharField(_('Name'), max_length=250)
    
    class GroupRequirement(models.Model):
        group_requirement_type = models.ForeignKey(GroupRequirementType, related_name='group_requirements', on_delete=models.CASCADE)
        name = models.CharField(_('Name'), max_length=250)
    
    class Requirement(models.Model):
        group_requirement = models.ForeignKey(GroupRequirement, related_name='requirements', on_delete=models.CASCADE)
        name = models.CharField(_('Name'), max_length=250)
    

    模板:

    {% for group_requirement_type in group_requirement_types %}
        {{ group_requirement_type }}
    
        {% for group_requirement in group_requirement_type.group_requirements.all %} <!--DONT WORK. WHY?-->
            {{ group_requirement }}
    
            {% for requirement in group_requirement.requirements.all %}
                {{ requirement }}
            {% endfor %}
    
        {% endfor %}
    
    {% endfor %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-16
      • 2019-02-10
      • 2017-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多