Django: упорядочивание элементов поля формы

У меня есть две модели с именами Quiz и Course

class Quiz(models.Model):
    course = models.ForeignKey(Course, on_delete=models.CASCADE, related_name='quizzes',)

и

class Course(models.Model):
    name = models.CharField(max_length=30)

Я использую модель викторины в createview.

class newQuiz(CreateView):
    model = Quiz
    template_name = 'teacher/new_quiz.html'
    fields = ['name', 'course', ]

поле курс отображается как поле выбора в форме как я могу упорядочить варианты курса в порядке возрастания при отображении в форме

?

Самый простой способ - предоставить одеринг по умолчанию для Course модели с помощью ordering мета-опции [Django-doc]:

class Course(models.Model):
    name = models.CharField(max_length=30)

    class Meta:
        ordering = ('name',)

или вы можете изменить форму в самом CreateView, переопределив .get_form(…) [Django-doc]:

class CreateQuizView(CreateView):
    model = Quiz
    template_name = 'teacher/new_quiz.html'
    fields = [
        'name',
        'course',
    ]

    def get_form(self, *args, **kwargs):
        form = super().get_form(*args, **kwargs)
        form.fields['course'].queryset = Course.objects.order_by('name')
        return form
Вернуться на верх