【问题标题】:Django Crispy Forms Layout Not Working Inside forms.ModelformDjango Crispy Forms 布局在 forms.Modelform 内部不起作用
【发布时间】: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 中做错了什么吗?

【问题讨论】:

    标签: html css django


    【解决方案1】:

    问题是在使用布局时需要以不同的方式调用crispy:

    {% load crispy_forms_tags %}
    {% block content %}
    <form method='post' class='mt-5'>
        {% csrf_token %}
        {% crispy form }
    </form>
    {% endblock %}
    

    【讨论】:

      猜你喜欢
      • 2012-06-16
      • 2014-05-19
      • 2012-11-10
      • 2015-02-02
      • 2021-05-26
      • 2014-02-26
      • 1970-01-01
      • 2023-03-24
      • 2019-07-31
      相关资源
      最近更新 更多