Skip to main content
 首页 » 编程设计

python之如何隐藏 Django 模型中的字段

2024年08月27日33jiqing9006

例如:

class TestModel(models.Model): 
    ref1 = models.ForeignKey(RefModel) 
    text1 = models.TextField() 
 
class TestModelForm(ModelForm): 
    class Meta: 
        model = TestModel 
        fields = ('text1') 

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

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

请您参考如下方法:

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

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

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

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() 
            # ...