Список checkbox Django ModelForm

#django

#django

Вопрос:

Я новичок в Django, и я создаю очень простую форму, вот она

Я хотел бы иметь флажок выбора радио (вместо списка выбора, как у меня сейчас), что-то вроде этого

Позже у меня будет больше вопросов в моей форме, и я думаю, что пользователю будет проще выбрать «радио»

Я пытался добавить некоторые widget=forms.RadioSelect в свою модель, но, похоже, мы не можем этого сделать здесь Вы знаете, как я мог бы это сделать?

Вот мой код :

models.py

 from django.db import models
from django import forms


class Post(models.Model):
    SAMPLE_CHOICES =( 
    (0, "Very satisfied"), 
    (1, "satisfied"), 
    (2, "neutral"), 
    (3, "not very satisfied"), 
    (4, "not satisfied at all"), 
    )    
    q1 = models.IntegerField(choices = SAMPLE_CHOICES, verbose_name=u"cleanliness of the premises")
    q2 = models.IntegerField(choices = SAMPLE_CHOICES, verbose_name=u"quality of services")
        
  

urls.py

 from django.urls import path 
from . import views

urlpatterns = [
    path('post/new/', views.post_new, name='post_new'),
]
  

views.py

 from .forms import PostForm
from.models import Post
from django.shortcuts import render


def post_new(request):
    form = PostForm()
    if request.method == 'POST':
        form = PostForm(request.POST)
        print(form.is_valid()) # some debug
        print(form)
        if form.is_valid():
            form.save()
            print(Post.objects.all()[-1].q1) # I print the form i just saved for debug purpuse
    

    return render(request, 'blog/post_edit.html', {'form': form})
  

forms.py

 from django import forms
from .models import Post


class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ('q1', 'q2')
  

base.html

 {% load static %}
<html>
    <head>
        <title>Satisfaction form</title>
    </head>
    <body>
        <div class="page-header">
            <h1>Satisfaction form</h1>
        </div>
        <div class="content container">
                    {% block content %}
                    {% endblock %}
        </div>
    </body>
</html>
  

Ответ №1:

если вы хотите изменить виджет для своего поля, ModelForm вы можете сделать это в class Meta:

 class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ('q1', 'q2')
        widgets = {
            'q1': forms.RadioSelect(),
        }