2014-10-29 153 views
0

我需要在我的表單中只讀模型字段。我使用以下方法執行此操作:什麼字段類型用於Django中的模型字段?

class ActivityEntryForm(forms.ModelForm): 
    activity = forms.CharField(widget=forms.TextInput(attrs={'readonly':'readonly'})) 
    duration = forms.IntegerField() 

    class Meta: 
     model = CustomerActivity 
     fields = ('activity', 'duration',) 

活動是CustomerActivity模型的實際模型外鍵字段。

這當前顯示活動標識號。我想要它打印活動的名稱。

我使用什麼字段類型或如何顯示名稱而不是id?

回答

1

首先,請注意,readonly屬性對於防止更改不安全。任何nitwit都可以使用任何瀏覽器內置的inspect元素等來改變html代碼。出於安全原因,最好從表單中排除該字段並以其他方式顯示數據,或者通過服務器端檢查來防止人們更改數據。

這也是解決您的問題的好方法。作爲ModelForm的一個實例,您的表單具有instance屬性,該屬性保存與該對象相關的實際數據,前提是該數據存在。而不是通過一個未使用的表單字段,請按原樣使用實例中的數據:

<input type="text" readonly="readonly">{% firstof form.instance.activity.name "<default>" %}</input>