我如何从django的“第三”相关模型中获取数据?

时间:2013-08-22 14:44:16

标签: django templates foreign-key-relationship

大家好,

我有这个型号:

class Pais(models.Model):
    nome = models.CharField('Nome', max_length=50)


class Brinq(models.Model):
    descricao = models.CharField('Nome', max_length=50)

class Filhos(models.Model):
    nome = models.CharField('Nome', max_length=50)
    idade = models.IntegerField('Idade')
    pai = models.ForeignKey('Pais')
    brinq = models.ForeignKey('Brinq', related_name='Brinq')

这个观点:

def editPai(request, idpai=None):
    if idpai:
        pai = Pais.objects.get(id=idpai)
    else:
        pai = None

    ItensInlineFormSet = inlineformset_factory(Pais, Filhos, form=FilhosForm, extra=1)
    formPais = PaisForm()
    formsetItens = ItensInlineFormSet(instance=pai)

    return render_to_response("base.html", {
        "formPais": formPais,  "formsetItens": formsetItens
    }, context_instance=RequestContext(request), )

并形成:

class PaisForm(ModelForm):
    class Meta:
        model = Pais

class FilhosForm(ModelForm):
    class Meta:
        model = Filhos

好的,我如何从模板中的“Brinq”模型中获取“descricao”值?我认为这是一个简单的问题但是,我尝试从互联网上寻找,寻找并再次寻找,但我没有发现任何相关信息。

我开始认为使用django不可能这样做,我想相信我错了,但正如我所说,我在互联网上没有找到任何相关信息。

我试试:

 {%  for form in formsetItens %}
  <tr>
       <td> {{ form.nome }}</td>
       <td> {{ form.idade }}</td>
       <td> {{ form.brinq__descricao }}</td>
  </tr>
  {% endfor %}

{{ form.brinq.descricao}},而且......没有...... :(

任何人都可以帮我解决这个问题吗?

此致

1 个答案:

答案 0 :(得分:0)

您正在尝试迭代FormSet。正如docs所说“formset使您能够迭代formset中的表单并像使用常规表单一样显示它们。”

因此,您可以执行以下操作以显示表单中包含的所有字段:

{%  for form in formsetItens %}
    {{ form.as_table }}
{% endfor %}

..或者如果它适合您的用例,您可以将每个表单包装到表单标记中,并loop覆盖表单字段:

{%  for form in formsetItens %}
    <form action="/contact/" method="post">
        {% for field in form %}
            <div class="fieldWrapper">
                {{ field.errors }}
                {{ field.label_tag }} {{ field }}
            </div>
        {% endfor %}
        <p><input type="submit" value="Send message" /></p>
   </form>
{% endfor %}