【发布时间】:2022-02-04 23:22:12
【问题描述】:
我已经让 CrispyForms 在通用 CreateView 中使用表单时加载自定义布局,如下所示:
class editEvent(UpdateView):
model = Event
fields = [field.name for field in model._meta.fields if field.name not in 'organization']
template_name = 'event_edit_modal.html'
def get_success_url(self):
org = self.request.user.profile.organization.url_name
messages.success(self.request, 'Success: event updated.')
return reverse('manage', kwargs={'org_name':org})
def get_form(self):
form = super().get_form()
form.fields['location'].queryset = Location.objects.filter(organization=Organization.objects.get(url_name=self.request.user.profile.organization.url_name))
form.fields['event_group'].queryset = EventGroup.objects.filter(organization=Organization.objects.get(url_name=self.request.user.profile.organization.url_name))
form.fields['register_start'].widget = DateTimePickerInput()
form.fields['register_end'].widget = DateTimePickerInput()
form.fields['start'].widget = DateTimePickerInput()
form.fields['end'].widget = DateTimePickerInput()
form.helper = FormHelper()
form.helper.add_input(Submit('submit', 'Update', css_class='btn-primary'))
form.helper.layout = Layout(
Row(
Column('name', css_class='col-8'),
Column('event_group', css_class='col-4'),
),
'location',
Row(
Column('start'),
Column('end'),
),
Row(
Column('register_start'),
Column('register_end'),
),
'details',
'team_event',
Row(
Column('min_team_members'),
Column('max_team_members'),
),
)
return form
但是,在不同的表单中,我需要在 forms.Modelform 中呈现 CrispyForms 布局。但是,由于某种原因,正在加载布局。 Django 加载的 help_texts 正在加载,但 FormHelper 布局没有:
class organizationForm(forms.ModelForm):
allowed_email_domains = forms.CharField(max_length=40)
owner_email = forms.EmailField(max_length=254)
owner_first_name = forms.CharField(max_length=60)
owner_last_name = forms.CharField(max_length=60)
owner_password = forms.CharField(widget=forms.PasswordInput())
confirm_owner_password = forms.CharField(widget=forms.PasswordInput())
class Meta:
model = Organization
fields = ['name', 'url_name', 'about_text']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['allowed_email_domains'].help_text = 'Optionally restrict users joining your organization to certain email domains. Example input: college.edu (do not include @ symbol)'
self.fields['owner_email'].help_text = 'Email address for the owner of your organization. This user will be given all administrator rights.'
self.helper = FormHelper()
self.helper.layout = Layout(
Row(
Column('name'),
Column('url_name'),
)
)
以下是我使用的模板:
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block content %}
<form method='post' class='mt-5'>
{% csrf_token %}
{{ form|crispy }}
</form>
{% endblock %}
我在 forms.Modelform 中做错了什么吗?
【问题讨论】: