【发布时间】:2023-03-12 04:47:02
【问题描述】:
我正在使用django-cripy-forms,我想让一个字段只读或不只读,这取决于我的代码中发生的其他事情。我当前的表单代码如下所示:
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Field, Submit
from django import forms
from .models import Contact
class ContactForm(forms.ModelForm):
class Meta:
model = Contact
exclude = ['author']
contact_email = forms.EmailField()
content = forms.CharField(widget=forms.Textarea(), required=True)
def __init__(self, email_readonly=False, *args, **kwargs):
super(ContactForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_id = 'contact-form'
self.helper.layout = Layout(
Field('contact_email', readonly=email_readonly),
Field('content'),
Submit('', 'Send')
)
但这总是将contact email 字段呈现为只读。
事实上,我注意到该字段不是只读的唯一方法是键 readonly 甚至没有出现在 Field 构造函数中,即
Field('contact_email', readonly=False),
效果与
完全相同Field('contact_email', readonly=True),
虽然我希望它具有与
相同的效果Field('contact_email'),
这是一个错误还是我滥用了代码?
编辑:
在我的模板中,我有两条线
{% load crispy_forms_tags %}
和
{% crispy form %}
我正在渲染模板
render(request, 'main_site/contact.html', context={'form':ContactForm(email_readonly=False)})`
或
render(request, 'main_site/contact.html', context={'form':ContactForm(email_readonly=True)})`
将True 和False 设置在其他位置(我认为这与当前问题无关,因为当前问题仅指email_readonly 设置为False 时的奇怪行为)
【问题讨论】:
-
您在视图中如何使用
ContactForm? -
@Alasdair 渲染包含
{% crispy form %}和render(request, 'main_site/contact.html', context={'form': ContactForm(email_readonly=False)})行的模板的标准方法
标签: django django-crispy-forms