Django表单:隐藏的模型字段? [英] Django Forms: Hidden model field?

查看:619
本文介绍了Django表单:隐藏的模型字段?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个表单。我想包括返回模型的隐藏字段。我会把它视为价值观;我只需要它发布到下一页。

I've got a Form. I want to include a hidden field that returns a model. I'll set it's value in the view; I just need it to be posted along to the next page.

我应该在表单类中使用什么字段?

What field am I supposed to use in the form class?

推荐答案

返回模型的隐藏字段?所以一个模型实例ID?

A hidden field that returns a model? So a model instance ID?

forms.HiddenInput 小部件应该做的诀窍,无论是在FK字段还是CharField你将一个模型实例ID放入。

The forms.HiddenInput widget should do the trick, whether on a FK field or CharField you put a model instance ID in.

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

我想最快的方式来获得这个工作是

I suppose the fastest way to get this working is

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']

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

But I don't like the idea of supplying MyModel.objects.all() if you're going to specify one item anyways.

似乎要避免这种行为,您必须用 __ init __ 的格式覆盖较小的 QuerySet

It seems like to avoid that behavior, you'd have to override the form __init__ with a smaller 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

这篇关于Django表单:隐藏的模型字段?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆