Внешний ключ модели Django null=false, но нулевое значение в списке select на форме

У меня есть следующее поле модели:

category = models.ForeignKey("QuestionCategory", on_delete=models.CASCADE, null=False, blank=False )

Правильно ли поведение Django, что при выводе в HTML-форму, в списке выбора присутствуют все варианты (все категории), а также "пустой вариант", представленный -----------
(как на картинке здесь)?:
enter image description here

Все равно при выборе пустого варианта и попытке сохранения возникает ошибка валидации, так что мне нужно выбрать один из элементов из списка...

Правильное ли это поведение django, что рендеринг в html-форме.

Да, он все равно будет использовать ---, но отклонит его при отправке формы. Это также может быть лучше, чем просто выбрать значение, поскольку это "намекает" пользователю, что ему, вероятно, лучше выбрать это значение. Это также означает, что некоторые пользователи могут не заметить поле.

Если вы все еще хотите автоматически выбирать первый элемент, вы можете работать с:

def default_category():
    return QuestionCategory.objects.first()


class Question(models.Model):
    category = models.ForeignKey(
        'QuestionCategory',
        on_delete=models.CASCADE,
        null=False,
        blank=False,
        default=default_category,
    )

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

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