我需要在我的表单中创建一个模型字段。我这样做有以下几点:
class ActivityEntryForm(forms.ModelForm):
activity = forms.CharField(widget=forms.TextInput(attrs={'readonly':'readonly'}))
duration = forms.IntegerField()
class Meta:
model = CustomerActivity
fields = ('activity', 'duration',)
Activity是CustomerActivity模型的实际模型外键字段。
目前显示活动ID号。我希望它打印活动的名称。
我使用哪种字段类型或如何显示名称而不是ID?
答案 0 :(得分:1)
首先,请注意readonly
属性不能安全地阻止更改。任何打字机都可以使用内置于任何浏览器中的检查元素等来更改html代码。出于安全原因,最好从表单中排除字段并以另一种方式显示数据,或者进行服务器端检查以防止人们更改数据。
这也是解决问题的好方法。作为ModelForm
的一个实例,您的表单具有instance
属性,该属性保存与该对象相关的实际数据,因为该数据存在。而不是通过未使用的表单字段,使用实例中的数据原样:
<input type="text" readonly="readonly">{% firstof form.instance.activity.name "<default>" %}</input>