每当我必须将一个值添加到从上下文或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方法中不可用。我该怎么办?在任何情况下,用户都不能编辑该值。
答案 0 :(得分:0)
是的,您通过labels
传递了它;您只需要将其分配给表单let
中的实例变量即可。
summ