Какой самый простой способ включить скрытое поле при использовании Django общих видов редактирования c - PullRequest
1 голос
/ 04 февраля 2020

Я хотел бы пропустить скрытое поле формы, но все же использовать Django Createview и не нужно создавать пользовательскую форму. Что-то вроде:

class ObjectCreateView(CreateView):
   model = Object
   fields = ['title','content','rating']

Где бы я хотел скрыть рейтинг. Я думал что-то вроде:

fields['rating'].widget = forms.HiddenInput()

может работать, но, конечно, это не так. Есть идеи?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

Подкласс CreateView и изменение метода get_form:

class ObjectCreateView(CreateView):
     model = Object
     fields = ['title','content','rating']

     def get_form(self, form_class=None):
         form = super().get_form( form_class)
         form.fields['rating'].widget = forms.HiddenInput()
         return form

Бесценная ссылка для CBV: Классные представления на основе классов

0 голосов
/ 04 февраля 2020

Мы можем создать подкласс CreateView для учета виджетов:

class WidgetCreateView(CreateView):
    <b>widgets = {}</b>

    def get_form_class(self):
        """Return the form class to use in this view."""
        if self.fields is not None and self.form_class:
            raise ImproperlyConfigured(
                "Specifying both 'fields' and 'form_class' is not permitted."
            )
        if self.form_class:
            return self.form_class
        else:
            if self.model is not None:
                # If a model has been explicitly provided, use it
                model = self.model
            elif getattr(self, 'object', None) is not None:
                # If this view is operating on a single object, use
                # the class of that object
                model = self.object.__class__
            else:
                # Try to get a queryset and extract the model class
                # from that
                model = self.get_queryset().model
            if self.fields is None:
                raise ImproperlyConfigured(
                    "Using ModelFormMixin (base class of %s) without "
                    "the 'fields' attribute is prohibited." % self.__class__.__name__
                )
            return model_forms.modelform_factory(
                model,
                fields=self.fields,
                <b>widgets=self.widgets</b>
            )

, тогда мы можем создать подкласс для:

class ObjectCreateView(<b>WidgetCreateView</b>):
    model = Object
    fields = ['title','content','rating']
    widgets = {
        <b>'rating': forms.HiddenInput</b>
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...