2016-01-08 1 views
1

У меня есть поле базы данных, в котором я хочу, чтобы значение required зависело от некоторых параметров, хранящихся в базе данных. В качестве простого примера:Django 1.7 app registry: определение пустого/обязательного на основе запроса БД

class ModelSetting(models.Model): 
    key=models.CharField(unique=True) 
    value=models.BooleanField() 

def get_setting(key): 
    return ModelSetting.objects.get(key=key).value 

class MyModel(models.Model): 
    phone_number=models.CharField(required=get_setting("phone_required")) 

Проблема заключается в том, что ModelSetting определяется в совершенно другом модуле из MyModel, поэтому я предполагаю, что во время импорта (когда phone_number поля оценивается) ModelSetting модель не доступна для использования , Это так? И есть ли возможное обходное решение?

django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet. 

ответ

1

required не является допустимым вариантом для models.CharField, вы, вероятно, хотите установить blank вместо этого.

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

Другим подходом было бы установить blank=True в поле модели, а затем установить phone_required в ваших формах. Таким образом, вы должны уметь избежать ошибок AppRegistryNotReady.

+0

Ах, я на самом деле имел в виду 'blank'. Верно ли, что Django будет запрашивать миграцию при изменении настроек базы данных? Когда я был на 1.6, это было не так. – benwad

+0

Кроме того, некоторые из моих полей используют аналогичную технику для 'default'. Достаточно ли было бы проверить требуемые/пустые поля и заполнить значение по умолчанию в методе 'clean' модели? – benwad

+0

Django 1.6 вообще не имеет миграций, поэтому вы не можете сравнить поведение с 1.7. Я уверен, что если вы измените 'blank' или' default' в Django 1.7, тогда будет предложено создать миграцию. – Alasdair

Смежные вопросы