2012-08-07 25 views
0

我的Django模型:如何在django中添加ForeignKey时使用phpmyadmin更新数据库?

#models.py 

class m1(models.Model): 
    some_word = models.CharField() 

我做分贝“manage.py执行syncdb”命令,然后添加一个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并创建此列。在这一刻,一切都很好,应用程序的作品。但后来我明白,我需要选择“空白=真”在用户现场:

#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应用程序',它告诉 '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

首先,你应该使用South为你做这些数据库迁移,特别是当你承认你并不真正了解发生了什么。

其次,错误不是因为缺少blank=True,而是因为缺少null=True,这是完全不同的事情。文档很好地解释了这一点。

相关问题