【问题标题】:How to update db with phpmyadmin when I add ForeignKey in django?当我在 django 中添加 ForeignKey 时,如何使用 phpmyadmin 更新数据库?
【发布时间】:2012-08-04 16:20:10
【问题描述】:

我有 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 不提供 db 修改,所以我需要手动创建列 '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 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 的东西(坦率地说,我不知道这些索引是做什么的)。 但是错误仍然存​​在。我该怎么办?

【问题讨论】:

    标签: django foreign-keys django-database


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      • 1970-01-01
      • 2016-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多