簡體   English   中英

如何在 django 模型中隱藏一個字段?

[英]How to hide a field in django modelform?

例如:

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

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

我嘗試添加一個小部件,但它對我不起作用,但我在不使用小部件的情況下以更簡單的方式解決了它。

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

我希望這可以幫助您或其他人;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM