Python 如何在django modelform中隐藏字段?

Python 如何在django modelform中隐藏字段?,python,django,django-models,django-views,django-forms,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方法时,我还想设置re

例如:

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,这可能吗?

您可以使用
HiddenInput
作为
ref1
小部件:

class TestModelForm(ModelForm):
    class Meta:
        model = TestModel
        widgets = {
            'ref1': forms.HiddenInput(),
        }
另一个选项是使用
commit
参数equal
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()
            # ...

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

我试图添加一个小部件,但它对我不起作用,但我用一种更简单的方法解决了它,而没有使用小部件

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

我希望这对您或其他人有所帮助;)

如果用户无法修改它,为什么要将其包含在表单中?您在视图中设置它的想法是正确的。你到底在坚持什么?@DanielRoseman举个例子,我希望网站根据用户访问的url自动生成ref1字段。最后有人把这件事说得很清楚。非常感谢。