在Django中的表单外添加字段值

时间:2018-12-15 12:07:15

标签: django django-forms

每当我必须将一个值添加到从上下文或URL获取的表单实例中时,我都会使用form.instance以以下方式进行操作。

class PreguntaForm(forms.ModelForm):
    class Meta:
        model = Pregunta
        fields = ('etiqueta', 'grupo', 'tipo_pregunta', 'opciones', 'mostrar_tabla', 'activo')

    def __init__(self, *args, **kwargs):
        cuestionario = kwargs.pop('cuestionario', False)
        super(PreguntaForm, self).__init__(*args, **kwargs)
        self.fields['grupo'].queryset = Grupo.objects.filter(cuestionario=cuestionario)

class PreguntaNueva(InfoPregunta, CreateView):
     form_class = PreguntaForm
     encabezado = 'Nueva Pregunta'
     model = Pregunta

    def get_form_kwargs(self):
        kwargs = super(PreguntaNueva, self).get_form_kwargs()
        kwargs['cuestionario'] = self.dame_cuestionario()
        return kwargs

    def form_valid(self, form):
        form.instance.cuestionario = self.dame_cuestionario()
        return super(PreguntaNueva, self).form_valid(form)

现在出现的问题是我要执行检查CreateView和EditView。要进行DRY,我想在模型的clean方法中执行此操作,但是我分配给form.instance.cuestionario的值在clean方法中不可用。我该怎么办?在任何情况下,用户都不能编辑该值。

1 个答案:

答案 0 :(得分:0)

是的,您通过labels传递了它;您只需要将其分配给表单let中的实例变量即可。

summ