I. Предположим, у вас есть следующие модели:Создание схемы для CharField vs BooleanField имеет другой выход, почему?
class Knight(models.Model):
name = models.CharField(max_length=100)
of_the_round_table = models.BooleanField()
II. Теперь вы добавите эту модель schemamigration Южной и миграции:
python manage.py schemamigration myapp --initial
python manage.py migrate myapp
III. Вы можете создать запись в таблице Knight
:
>>> jason = Knight.objects.get(name=”Jason”)
Ничего из обычных здесь, только регулярной рутиной. Однако обратите внимание на следующее.
IV-A. Добавить новое поле модели (CharField
):
class Knight(models.Model):
name = models.CharField(max_length=100)
of_the_round_table = models.BooleanField()
surname = models.CharField(max_length=100) # +
V-A. Написать schemamigration для этого нового поля:
$ python manage.py schemamigration myapp --auto
? The field 'Knight.surname' does not have a default specified, yet is NOT NULL.
? Since you are adding this field, you MUST specify a default
? value to use for existing rows. Would you like to:
? 1. Quit now, and add a default to the field in models.py
? 2. Specify a one-off value to use for existing columns now
НО
Теперь давайте попробуем шаг IV и V снова, но с BooleanField
вместо CharField
IV-B. Добавить новое поле модели (BooleanField
):
class Knight(models.Model):
name = models.CharField(max_length=100)
of_the_round_table = models.BooleanField()
has_sword = models.BooleanField() # +
V-B. Написать schemamigration для этого нового поля:
$ python manage.py schemamigration myapp --auto
+ Added field has_sword on registration.Knight
Created 0005_auto__add_field_knight_has_sword.py. You can now apply this migration with: ./manage.py migrate registration
Q1: Почему я получаю другой выход для добавления BooleanField
(V-B
), чем для добавления CharField
(V-A
), даже если according to the Django docs оба эти поля имеют null=False
по по умолчанию?
Q2: Как вы должны знать, какие поля будут давать результаты, подобные BooleanField
и какие из них даст выход как CharField
при применении python manage.py schemamigration myapp --auto
к модели, в данном обстоятельстве?
Я использую SQlite
как РСУБД и Django 1.4
кстати.
Aha ok, поэтому в случае, когда я дал какое-либо другое поле, но 'BooleanField' будет генерировать тот же результат, что и CharField (для Django 1.4). – Bentley4
Да, я так считаю. –