Как получить доступ к объекту формы до и после сохранения в django-bootstrap-modal-forms

В моем представлении добавления нового элемента есть следующий код. Некоторые поля заполняются пользователем, некоторые поля заполняются в фоновом режиме. Если форма валидна, то пользователь перенаправляется на url с параметром (slug) от добавленного объекта. Как я могу преобразовать этот код в django-bootstrap-modal-forms способ?

def category_view(request, slug, *args, **kwargs):
...
if request.POST:
    form = CreateItemForm(request.POST)
    if form.is_valid():
        if not request.user.is_authenticated:
            raise PermissionDenied()
        obj = form.save(commit=False)
        obj.created_country = Constants.country_code
        obj.created_by = request.user
        obj.save()
        return redirect('category:item_detail', slug=obj.slug)

Я использовал django-bootstrap-modal-forms следующим образом. но поля страна и пользователь не являются null и должны быть заполнены. Эти поля не являются частью формы.

class add_person(BSModalCreateView):
  template_name = 'add_item.html'
  form_class = CreateItemForm
  success_message = 'Success: Item was created.'
  success_url = reverse_lazy('category:item_detail') # slug needed

Вы спрашиваете, как изменить форму, и единственный код, который вы не предоставили - это форма. Но попробуйте сделать что-то вроде этого:

forms.py

class BaseForm(forms.BaseForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for field in self.fields.values():
            if isinstance(field.widget, widgets.RadioSelect):
                continue
            elif isinstance(field.widget, widgets.Select):
                field.widget.attrs.update({'class': 'form-select'})
                continue
            field.widget.attrs.update({'class': 'form-control'})


class CreateItemForm(BaseForm):
    # your code

Этот итерес над вашими FormField и добавляет класс bootstrap form-select, или гораздо более важный form-control к виджету вашего поля.

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