Эта проблема:
Вот мой класс с двумя ForeignKey
(dept
и salary_range
). Примечание null=True
:
class UserProfile(models.Model):
user = models.OneToOneField(User, related_name='user_profile')
avatar = models.CharField(max_length=300, default='/static/default.png')
dept = models.ForeignKey(Department, null=True)
salary_range = models.ForeignKey(SalaryRange, null=True)
Запуск python manage.py sqlall main
, кажется, показывает правильный sql (нет NOT NULL
на dept_id
и salary_range_id
:
CREATE TABLE "main_userprofile" (
"id" integer NOT NULL PRIMARY KEY,
"user_id" integer NOT NULL UNIQUE REFERENCES "auth_user" ("id"),
"avatar" varchar(300) NOT NULL,
"dept_id" integer REFERENCES "main_department" ("id"),
"salary_range_id" integer REFERENCES "main_salaryrange" ("id"),
Но IntegrityError
возникает при создании UserProfile
:
main_userprofile.dept_id may not be NULL
И при проверке базы данных оба столбца устанавливаются NOT NULL
. Как? Почему?
Взлом:
Все, что я смог придумать, это изменить таблицу после syncdb
:
ALTER TABLE main_userprofile ALTER COLUMN dept_id DROP NOT NULL;
ALTER TABLE main_userprofile ALTER COLUMN salary_range_id DROP NOT NULL;
Это работает для Postgres, но sqlite не имеет опции ALTER COLUMN
.
syncdb
не будет изменять таблицу. Проблема существует из свежей БД. - person kiks   schedule 07.08.2013default=0
безрезультатно, ноdefualt=-1
кажется полезным. - person kiks   schedule 07.08.2013