Django Forms:隐藏的模型字段?

mpe*_*pen 18 django

我有一个Form.我想要包含一个返回模型的隐藏字段.我会在视图中设置它的值; 我只是需要将它发布到下一页.

我应该在表单类中使用哪个字段?

Yuj*_*ita 29

一个返回模型的隐藏字段?那么一个模型实例ID?

forms.HiddenInput插件应该做的伎俩,无论是在FK字段或CharField你把一个模型实例ID.

class MyForm(forms.Form):
    hidden_2 = forms.CharField(widget=forms.HiddenInput())
    hidden_css = forms.CharField(widget=forms.MostWidgets(attrs={'style': 'display:none;'}))
Run Code Online (Sandbox Code Playgroud)

我认为让这项工作最快捷的方法是

class MyForm(forms.Form):
    model_instance = forms.ModelChoiceField(queryset=MyModel.objects.all(), widget=forms.HiddenInput())

form = MyForm({'model_instance': '1'})
form.cleaned_data['model_instance']
Run Code Online (Sandbox Code Playgroud)

但是,如果您要指定一个项目,我不喜欢提供MyModel.objects.all()的想法.

似乎要避免这种行为,你必须__init__用更小的覆盖形式QuerySet.

我想我更喜欢老式的方式:

class MyForm(forms.Form):
    model_instance = forms.CharField(widget=forms.HiddenInput())

    def clean_model_instance(self):
        data = self.cleaned_data['model_instance']
        if not data:
            raise forms.ValidationError()
        try:
            instance = MyModel.objects.get(id=data)
        except MyModel.DoesNotExist:
            raise forms.ValidationError()
        return instance
Run Code Online (Sandbox Code Playgroud)