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



我有django模型:

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

我用"manage.py syncdb"命令创建了数据库,然后将外键字段添加到模型中

#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并创建此列。目前一切正常,应用程序可以正常工作。但后来我明白我需要在用户字段中选择"空白 = 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 应用程序",它告诉"创建表"并创建索引:

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的事情(坦率地说,我不知道这些索引是做什么的)。但错误仍然发生。我该怎么办?

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

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

最新更新