Я пытаюсь связать свой FormView, чтобы показать форму в djangocms, но я не могу - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь связать мои FormView, чтобы показать Form в djangocms, но я не могу, моя модель:

class ContactFormView(FormView, CMSPlugin):
    template = '/ContactForm/ContactForm.html'
    form_class = contact_form
    success_url = reverse_lazy('success-page')

    def post(self, request, **kwargs):
        assert request.is_ajax()
        request_data = json.loads(request.body)
        form = self.form_class(data=request_data[self.form_class.scope_prefix])
        if form.is_valid():
            return JsonResponse({'success_url': force_text(self.success_url)})
        else:
            response_data = {form.form_name: form.errors}
            return JsonResponse(response_data, status=422)

cms_plugins.py:

class ContactFormPlugin(CMSPluginBase):
    model = ContactForm.ContactFormView
    render_template = '/ContactForm/ContactForm.html'
    name = 'Contact Form'
    allow_children = False

plugin_pool.register_plugin(ContactFormPlugin)

1 Ответ

0 голосов
/ 30 сентября 2018

Глядя на то, что у вас есть, я не уверен, что вы дали вашему плагину правильную модель, но вид !?И класс формы не класс формы, form_class = contact_form, но что такое contact_form?Вам нужно, чтобы это был класс вашей формы, например

class ContactForm(forms.Form):
    name = forms.CharField(label='Your name', max_length=100)
    email = forms.EmailField(label='Your email', max_length=100)


class ContactFormView(FormView):
    template = '/ContactForm/ContactForm.html'
    form_class = ContactForm
    success_url = reverse_lazy('success-page')

И если у вас есть форма, которую вы хотите, чтобы ваш плагин отображал, вы должны указать ей, что делать ...

from cms.models.pluginmodel import CMSPlugin

class ContactFormPlugin(CMSPluginBase):
    model = CMSPlugin
    render_template = '/ContactForm/ContactForm.html'
    name = 'Contact Form'
    allow_children = False

    def render(self, context, instance, placeholder):
        context = super(ContactFormPlugin, self).render(context, instance, placeholder)
        context['form'] = ContactForm()
        return context

Однако вы работаете с плагином CMS, поэтому вы вообще не определяете View для плагина.Я думаю, вы могли бы заставить это делать то, что вы пытаетесь сделать, но представление не хочет наследовать CMSPlugin, потому что вы просто хотите, чтобы представление получало данные из плагина.

Если вам нужно определитьзатем вы создаете приложение, для которого в CMS требуется Apphook, а не плагин.(Технически вы можете публиковать на URL-адрес без Apphook, но зависит от того, насколько вам нужна интеграция с CMS)

Существует отличный пример, который начинается с публикации плагина в представлении, а затем переходит в интеграцию приложения, что возможноВот;http://docs.django -cms.org / ен / последний / Введение / plugins.html

...