为什么_全部设置不在坦普尔工作?

2024-09-30 04:27:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有3个相互连接的模型。GroupRequirementType --> GroupRequirement --> Requirement。我尝试在模板中显示所有要求。下一段代码只显示GroupRequirementType对象。好像我对_set.all有问题。怎么了?你知道吗

型号.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 %}

Tags: namemodelmodelstypegrouprequirementalllength
2条回答

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

在你的情况下,它会变成

型号.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 %}

在将CamelCase模型名转换为小写时,Django似乎不会自动添加下划线。grouprequirement_set.all有效。你知道吗

相关问题 更多 >

    热门问题