例如:

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参数等于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()
            # ...

07-27 21:54