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>