2014-11-14 2 views
1

В соответствии с документацией Django Model, null и blank по умолчанию установлены False. Итак, каково будет значение по умолчанию для IntegerField, если я не предоставил его явно? Кроме того, будут полезны CharField и другие.Каковы значения по умолчанию для полей Django?

+1

У меня нет установки django под рукой, и я не буду беспокоиться о том, чтобы найти исходный код, но если вы не предоставляете значение по умолчанию, значение по умолчанию для любого поля будет ' None ", который переводится в SQL' NULL' - который, конечно же, должен вызывать исключение на уровне базы данных (по крайней мере, в любой соответствующей SQL-базе данных), если вы оставите в определении поля значение null = False. Но вам лучше попытаться выяснить это самостоятельно (дело в пять минут, если у вас уже есть проект django). –

+0

@brunodesthuilliers, спасибо. – norbertpy

ответ

3

Как мы можем видеть в методах полевых

def has_default(self): 
    """ 
    Returns a boolean of whether this field has a default value. 
    """ 
    return self.default is not NOT_PROVIDED 

def get_default(self): 
    """ 
    Returns the default value for this field. 
    """ 
    if self.has_default(): 
     if callable(self.default): 
      return self.default() 
     return force_text(self.default, strings_only=True) 
    if (not self.empty_strings_allowed or (self.null and 
       not connection.features.interprets_empty_strings_as_nulls)): 
     return None 
    return "" 

Было бы None для IntegerField из empty_strings_allowed = False, и после этого на создание или сохранение, вы получите ValidationError(), потому что значение в не int()

как для CharField вы получите «пустую строку», потому что CharField имеет empty_strings_allowed = True

PS избегать использования null=True на CharField и TextField, как не в Django documentaion говорит

Избегайте использования нуль на струнных основе таких областях, как CharField и TextField, потому что пустые строковые значения всегда будут храниться в виде пустых строк, а не NULL. Если в строковом поле имеет значение null = True, то означает, что он имеет два возможных значения для «no data»: NULL и пустую строку . В большинстве случаев избыточно иметь два возможных значения для «нет данных», соглашение Django должно использовать пустую строку, а не NULL.

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