如何隐藏django模型中的字段?

时间:2014-03-24 10:31:03

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

例如:

class TestModel(models.Model):
    ref1 = models.ForeignKey(RefModel)
    text1 = models.TextField()

class TestModelForm(ModelForm):
    class Meta:
        model = TestModel
        fields = ('text1')

我只允许用户输入 text1 字段,但是当我重新定义视图的 post方法时,我还想设置 ref1 价值,我该怎么做?

我希望我可以让TestModelForm拥有ref1字段但不允许用户修改它,然后我可以在post方法中修改request.POSt的值,并将其传递给TestModelForm,这可能吗?

2 个答案:

答案 0 :(得分:3)

您可以将HiddenInput用作ref1小部件:

class TestModelForm(ModelForm):
    class Meta:
        model = TestModel
        widgets = {
            'ref1': forms.HiddenInput(),
        }

另一个选项是保存commit参数等于False的表单。这样,您只能在表单中包含可见字段,然后使用所需数据更新模型实例:

def some_view(request):
    # ...
    if request.method == 'POST':
        form = TestModelForm(request.POST)
        if form.is_valid():
            instance = form.save(commit=False)
            ref = get_ref_according_to_url()
            instance.ref1 = ref
            instance.save()
            # ...

答案 1 :(得分:0)

注意:我正在使用 (Django 3.2)

我尝试添加一个小部件,但它对我不起作用,但我在不使用小部件的情况下以更简单的方式解决了该问题。

class TestModelForm(ModelForm):
    ref1 = forms.CharField (widget = forms.Textarea(
        attrs = {
            'hidden': '',
        }
    ))

我希望这能帮助你或其他人;)