Форма Django Model Multi Select отображается неправильно

Я пытаюсь отобразить все категории в виде списка, который я могу нажать и выбрать, просто точная копия того, что у меня есть в моей панели администратора, но он все еще отображается как список, который не кликабелен.

forms.py

class ProfileEditForm(forms.ModelForm):
    """
    Form for updating Profile data
    """

    class Meta:
        model = Profile

        fields = [
            "first_name",
            "last_name",
            "about_me",
            "profile_image",
            "username",
            "email",
            "categories",
        ]

    first_name = forms.CharField(label="First Name", max_length=63, required=False)
    last_name = forms.CharField(label="Last Name", max_length=63, required=False)
    about_me = forms.CharField(label="About Me", max_length=511, required=False)
    email = forms.EmailField(label="Email", disabled=True)
    username = forms.CharField(label="Username", disabled=True)
    profile_image = forms.ImageField(required=False)
    categories = forms.ModelMultipleChoiceField(
        queryset=Category.objects.all(),
        required=False,
        widget=forms.CheckboxSelectMultiple(),
    )

settings.html

<div class='row'>
            <div class="col s12 m6">
              {{form.categories.errors}}
              {{form.categories.label_tag}}
              {{form.categories}}
            </div>
</div>

Выход enter image description here

Вам необходимо создать саму форму:

<form method='post'>

</form>

И выведите каждое поле на новой строке:

{{ form.as_p }}

является проверкой безопасности.

{% csrf_token %}

В представлении я оставил get_context_data. В нем вы можете добавлять значения в контекст, например, так:

def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        
        context['rubrics'] = Car.objects.all()

Замените bboard на название папки, в которой находятся ваши шаблоны. У меня это: templates/bboard, которые находятся в папке приложения.

В представлении для формы используется класс CreateView, в котором: template_name - имя шаблона для отображения страницы, form_class - указывается класс формы, success_url - куда возвращаться в случае успешного сохранения формы (в данном случае это та же страница с формой), get_context_data - контекст шаблона (можно распечатать и посмотреть, что внутри).

template_name = 'bboard/tam_form.html'

Шаблоны

<form method='post'>
    {{form.categories.errors}}
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value='adding'>
</form>

views.py

from .forms import *
from django.views.generic.edit import CreateView
from django.urls import reverse_lazy

class Profile(CreateView):
    template_name = 'bboard/settings.html'
    form_class = ProfileEditForm
    success_url = reverse_lazy('test')

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)

        return context

urls.py

from django.urls import path
from .views import *

urlpatterns = [
           path('test/', Profile.as_view(), name='test'),
]
Вернуться на верх