Как разместить капчу на Django CreateView

Я работаю в существующей кодовой базе, которая использует Django Material. Есть CreateView, определенный как:

class OurModelCreateView(LayoutMixin, CreateView): 
    model = OurModel

Этот вид получает много спам-регистраций и поэтому нуждается в капче. Я использую Django Recaptcha, и я установил несколько капч в прошлом. Однако я никогда не устанавливал их на общее представление. Если я создаю Django форму и определяю поле капчи в форме, как это всегда делалось в прошлом:

from captcha.fields import ReCaptchaField
from captcha.widgets import ReCaptchaV3

class OurModelForm(ModelForm):
    
captcha = ReCaptchaField(widget=ReCaptchaV3)

    class Meta:
        model = OurModel
        exclude = ()

и затем указываю form_class = OurModelForm на CreateView, то получаю ошибку, говорящую, что fields и form_class не могут быть указаны одновременно. Это происходит потому, что LayoutMixin в Django Material определяет fields: https://github.com/viewflow/django-material/blob/294129f7b01a99832a91c48f129cefd02f2fe35f/material/base.py (внизу страницы)

Поэтому я думаю, что единственный способ сделать то, что мне нужно - это динамически вставить поле captcha в форму.

Следующие две попытки не работают:

   On the CreateView:
       def get_form(self, form_class=None):
           form = super(OurModelCreate, self).get_form(form_class)
           form.fields['captcha'] = ReCaptchaField(widget=ReCaptchaV3)
           return form

       def fields(self):
           fields = [super().fields(*args, **kwargs)]
           fields['captcha'] = ReCaptchaField(widget=ReCaptchaV3)
           return [field.field_name for field in fields]

В прошлом я динамически вставлял поля в формы Django (в __init__() определения формы), но я не могу понять, что нужно переопределить в CreateView или LayoutMixin в Django Material, чтобы динамически вставить поле captcha в форму. Любая помощь будет очень признательна.

После комментария @Alasdair выше, который указал мне на ответ, я решил эту проблему, удалив LayoutMixin из CreateView Django Material, создав Django форму с определенным полем captcha, а затем добавив в CreateView form_class для Django формы. Также см. мой последний комментарий выше. Это было нелогично для меня, пока я снова не посмотрел на код после второго комментария @Alasdair: использование LayoutMixin на CreateView не обязательно для того, чтобы layout = Layout(...) на CreateView работало.

Вернуться на верх