迭代Foregin键选项并将其分配给inlineformset中的每一行

时间:2016-05-20 18:15:36

标签: django django-models django-forms django-templates django-views

我有一个内联formset,我需要将一个ForeignKey字段的值按顺序和单一地分配给内联formset的每一行。使用modelchoicefield的select默认小部件一切正常,但我不希望用户选择任何选项,但要提供foreignfield中可用选项的列表。 我的inlineformset如下:

class ResultadoForm(forms.ModelForm):
    frequencia = forms.CharField(max_length=50)
    tolerancia = forms.CharField(max_length=255)
    def __init__(self, *args, **kwargs):
        equipamento_id = kwargs.pop('equipamento_id', None)
        super (ResultadoForm, self).__init__(*args, **kwargs)
        self.fields['teste'].queryset = Teste.objects.filter(equipamento=equipamento_id).order_by('grupoteste', 'numeracao')

    class Meta:
        model = Resultado
        exclude = ['actividade']

我的观点呈现表格:

@login_required()
def QAView(request, equipamento_id):

    form = ActividadeForm()
    form1 = ResultadoForm(equipamento_id)
    equipamento = Equipamento.objects.get(id=equipamento_id)
    testes_list = Teste.objects.filter(equipamento=equipamento_id)
    FormSet = inlineformset_factory(Actividade, Resultado, form=ResultadoForm, fields='__all__', extra=len(testes_list))
    formset = FormSet(form_kwargs={'equipamento_id': equipamento_id})
    context = {'equipamento_id': equipamento_id, 'data':datetime.now(), 'equipamento': equipamento, 'form': form, 'testes_list': testes_list, 'formset': formset}
    template = 'SFM/Equipamento/QA.html'

return render(request, template, context)

在我的模板中:

{% for r in formset %}
{{ r.id }}
{% for t in r.teste.field.queryset %}
    <tr>
        <td>{{ t}}</td>
        <td>{{ t.frequencia }}</td>
        <td>{{ t.tolerancia }}</td>
        <td>{{ r.conforme }}</td>
    </tr>
{% endfor %}
{% endfor %}

我的Resultado模型:

class Resultado(models.Model):
    CONFORME_CHOICES = (
    ("Sim", "Sim"),
    ("Não", "Não"),
    )

    teste = models.ForeignKey(Teste, null=True, blank=True, on_delete=models.CASCADE)
    conforme = models.CharField(max_length=30, choices=CONFORME_CHOICES)
    actividade = models.ForeignKey(Actividade, null=True, blank=True, on_delete=models.CASCADE)

    def __str__(self):
    return str(self.id)

使用此模板,我得到4行。我应该只得到两个。但我有两个外键选项,所以我重复了两个外国选项。 是否可以为此inlineformset的每一行分配一个且只有一个外键?例如,第一行自动分配第一个外部值,第二行自动分配第二个外部值。请帮忙。

0 个答案:

没有答案