当我在django中添加外键时如何用phpmyadmin更新数据库?

时间:2012-08-07 15:49:04

标签: django foreign-keys django-database

我有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的东西(坦率地说,我不知道这些索引是做什么的)。 但错误仍然存​​在。我该怎么办?

1 个答案:

答案 0 :(得分:0)

首先,您应该使用South为您执行这些数据库迁移,尤其是当您承认自己并不真正了解正在进行的操作时。

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