我有django模型:
#models.py
class m1(models.Model):
some_word = models.CharField()
我使用'manage.py syncdb'命令创建了db,然后将一个ForeignKey字段添加到模型中
#models.py
from django.contrib.auth.models import User
class m1(models.Model):
some_word = models.CharField()
user = models.ForeignKey(User)
据我所知,本机django不提供数据库修改,因此我需要手动创建列'user_id'。好的,我去phpmyadmin并创建这个专栏。此刻一切正常,应用程序正常运行。但后来我明白我需要在用户字段选择'blank = True':
#models.py
from django.contrib.auth.models import User
class m1(models.Model):
some_word = models.CharField()
user = models.ForeignKey(User, blank = True)
在保存任何m1对象时,我收到错误'无法分配无:“m1.user”不允许空值'。我知道,如果我删除表并使用syncdb制作它,一切都会好的,如果我使用像South这样的迁移工具,它也可以。但是我想了解这个的机制并找出db有什么问题。
我称之为'manage.py sqlall app',它会告诉'CREATE TABLE'并创建索引:
CREATE INDEX `app_m1_a703c35a` ON `app_m1` (`user_id`);
ALTER TABLE `app_m1` ADD CONSTRAINT `user_id_refs_id_5b1b34cc`
FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`);
好的,我去phpmyadmin做这个sql的东西(坦率地说,我不知道这些索引是做什么的)。 但错误仍然存在。我该怎么办?
答案 0 :(得分:0)
首先,您应该使用South为您执行这些数据库迁移,尤其是当您承认自己并不真正了解正在进行的操作时。
其次,错误不是因为它缺少blank=True
,而是因为它缺少null=True
,这是完全不同的事情。文档很好地解释了这一点。