簡體   English   中英

Django 表格,設為只讀字段

[英]Django Form, make readonly field

我正在嘗試使用 Django 創建一個表單,並且我的目標是擁有一個只讀字段,但沒有成功。 該字段應包含在視圖中計算的代碼,但我需要將其顯示給用戶。

這是 Model:

class Customer(models.Model):
    name = models.CharField(max_length = 250)
    note = models.CharField(max_length=500,blank=True,null=True)
    code = models.IntegerField(null=True,blank=True,unique=True)

這是表格:

class NewCustomerForm(forms.ModelForm):
    class Meta:
        model = Customer
        fields = ['name', 'code', 'note']

這應該很容易,但我面臨很多問題。 我已經嘗試過的:

  1. Field.disabled = True (文檔沒有解釋我應該把這個屬性放在哪里,所以也許我弄錯了)
  2. self.fields['code'].widget.attrs['readonly'] = True in __init __
  3. self.fields['code'].widget.attrs['disabled'] = True in __init __

在所有三種方法中,該字段仍可由用戶編輯

如果html output中不需要代碼字段值,我建議從表單中排除該字段並計算表單視圖中的值是否有效。 您可以在保存之前將計算值分配給視圖中的 model 實例。

class YourView(views.CreateView):
    def form_valid(self, form):
        form.instance.code = your_calculated_value
        return super().form_valid(form)

用戶始終可以編輯 HTML 輸入,即使您將readonlydisabled設置為 true,用戶也可以刪除這兩個標志並輸入一個值

但是,只要該字段呈現為readonlydisabled ,並且用戶很明顯該字段是固定的,並且您的 python 代碼設置了一個忽略用戶輸入的固定值,那么您應該沒問題。

暫無
暫無

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

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