Свойство default
в ArrayField
должно вызываться. Вы можете прочитать больше об этом здесь: https://docs.djangoproject.com/en/3.0/ref/contrib/postgres/fields/.
То, что вы получаете, разместив прямо там list(dict(constants.NOTIFICATION_SOURCE).keys())
, является всего лишь предупреждением, поэтому оно все равно должно добавить значения по умолчанию в поле. Поместив это значение по умолчанию непосредственно туда, оно добавит в миграции следующее, и значения будут общими для всех экземпляров поля:
default=['order_status_changed', 'new_signal']
Чтобы избавиться от предупреждения, вы должны создать функцию, которая возвращает значение по умолчанию значение:
def get_email_default():
return list(dict(constants.NOTIFICATION_SOURCE).keys())
и поставить функцию в качестве поля по умолчанию:
email = ArrayField(models.CharField(
choices= constants.NOTIFICATION_SOURCE,
max_length=16
), default=get_email_default)
При этом предупреждение исчезнет, и из функции вы получите logi c для выбора значения по умолчанию.
После этого в миграциях значение по умолчанию будет выглядеть так:
default=my_model.models.get_email_default