我有典型的个人资料/帐户设置表单。正如预期的那样,您将拥有一个“名称”字段和一个“域”字段(将用作网站URL:maddy.mywebsite.com)。此域字段只能编辑一次。一旦设置为一件事,以后就不会被编辑(因为这就像一个网站网址)。
在模型级别,我正在比较该对象的created_on和modified_on(userprofile)并验证“domain”值的保存。但是在表单级别,如何根据我采取的条件单独自定义该字段的呈现?
注1:我不想将“域”字段移动到注册页面。
注意2:我正在尝试使用普通表单(django.forms)而不是ModelForm。
答案 0 :(得分:1)
您可以尝试使用两个htmls,一个用于创建配置文件,另一个用于编辑配置文件。如果您使用相同的django,则在创建配置文件中呈现完整表单并编辑配置文件,您可以使用css或javascript禁用#id_name和#id_domain字段。使用js的实现:
<script type="text/javascript">
var domain = document.getElementById("id_domain");
var name = document.getElementById("id_name");
domain.value = "{{ domain }}";
name.value = "{{ name }}";
domain.readOnly = true;
</script>
答案 1 :(得分:1)
这看起来很棘手,你可以阅读下面的一些想法:
In a Django form, how do I make a field readonly (or disabled) so that it cannot be edited?
http://lazypython.blogspot.com/2008/12/building-read-only-field-in-django.html
但这些都不是特别简单,所以我建议(和@dcrodjer一样):
创建两个表单,一个用于创建,一个用于编辑。在编辑表单上,删除“域”字段,这样就不需要/不会保存:
# forms.py
class AddForm(ModelForm):
class Meta:
model = UserProfile
fields = ('name','domain',)
class EditForm(ModelForm):
class Meta:
model = UserProfile
fields = ('name',)
在您的视图中,创建相应的表单,并在模板中根据您给出的表单呈现不同的HTML:
{% if form.domain %}
{{form.domain.label_tag}}: {{form.domain}} {{form.domain.errors}}
{% else %}
Domain: <input type="text" disabled="disabled" value="{{userprofile.domain}}"/>
{% endif %}