问题:
这是我的课程,有两个ForeignKey
s (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
ondept_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
选项..