Django CharField TypeError: __init __ () получил неожиданный аргумент ключевого слова 'empty_value' - PullRequest
0 голосов
/ 11 октября 2019

Django предлагает мне установить empty_value для CharField: https://docs.djangoproject.com/en/2.2/ref/forms/fields/#django.forms.CharField.empty_value

Я пытаюсь изменить свое поле с:

my_field = models.CharField(max_length=80, blank=True)

на:

my_field = models.CharField(max_length=80, blank=True, null=True, empty_value=None)

Я получаю эту ошибку при попытке создать миграцию:

Файл "/Virtualenv/python3.7/site-packages/django/db/models/fields/init.py ", строка 1039, в init super (). init (* args, ** kwargs) TypeError: init () получил неожиданный аргумент ключевого слова 'empty_value'

Причина в том, что я хочу установить unique_together для модели, которая включает в себя my_field и другие поля, со следующим поведением:

  • Если my_field равен NULL, я хочу, чтобы предложение unique_together всегда разрешало другие комбинации, потому что NULL! = NULL в SQL .
  • Если my_field не NULL, я хочу, чтобы предложение unique_together проверяло уникальность по отношению к другим полям.

Я не хочу проверки, которая не является проверкой базы данных, такой как clean или validate_my_field метод или аналогичный.

1 Ответ

1 голос
/ 11 октября 2019

Вы пытаетесь использовать forms.CharField как models.CharField, у которого нет empty_value. Для моделей вам нужно использовать default поле .

В каком файле этот код?

Если в models.py (вы определяете модель), тогда используйте default вместо empty_value.

Если в forms.py (вы определяете форму), то импортируйте django.forms, а не django.db.models, и тогда вы можете использовать:

my_field = forms.CharField(max_length=80, required=False, empty_value=None)
...