Прежде всего, не установить first_name
в качестве первичного ключа. Просто оставьте первичный ключ по умолчанию как поле id
. Первичный ключ должен быть уникальным (а не first_name
) и не должен быть чем-то, что вводит пользователь.
Во-вторых, это правда, что вы не можете заставить CharField
не быть пустым в базе данных. уровень. Но вы можете применить его на уровне кода, так что в любое время, когда вы создаете Django Form
и проверяете его, это вызывает ошибку.
Фактически, Django делает это автоматически для вас, в твоем случае. По умолчанию first_name
является полем required
, так как вы не установили blank=True
.
Так что если вы сделаете:
musician = Musician()
musician.full_clean()
, это вызовет ValidationError
.
Если вы создаете форму для своей модели (это то, что вам нужно, если вы хотите, чтобы пользователи создавали Musician
):
class MusicianForm(ModelForm):
class Meta:
model = Musician
fields = '__all__'
form = MusicianForm(data={})
form.instance.first_name
# ''
form.is_valid()
# False
form.save()
# ValueError: The Musician could not be created because the data didn't validate.
Вы также увидите это, если зарегистрируетесь Musician
в admin.py
для django сайта администратора, вы не можете оставить ни одно из полей пустым. Это просто не спасет.