【问题标题】:Allow null in foreign key to user. Django允许用户的外键为空。姜戈
【发布时间】:2010-12-21 05:35:18
【问题描述】:

我有这个模型

class Vacancy(models.Model):
    user = models.ForeignKey(User, null=True, blank=True, default = None)
    name = models.CharField(max_length=64)

在管理员中,我尝试在没有用户的情况下创建一个空缺。它会引发错误“club_vacancy.user_id 可能不是 NULL”。 我是不是做错了什么?

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

    club_vacancy.user_id may not be NULL

    看起来很像来自您的数据库而不是来自 Django 的错误。

    您很可能在运行manage.py syncdb 之后添加了null=True。您需要修改数据库架构以允许该列中有空值。

    【讨论】:

    • 好吧,我在添加 null=true 之前和之后运行了 syncdb。我应该如何修改我的数据库?
    • syncdb 不会修改已经存在的表。删除表并再次运行 syncdb,或手动修改数据库,或使用迁移应用程序。
    • 迁移应用,如“南”
    • 我不知道如何删除表,所以我删除了数据库并再次创建它。现在可以了。
    • 较新的 Django 版本内置了迁移功能。
    【解决方案2】:

    除了 South,另一种选择是使用 django evolution 进行架构更改。

    http://code.google.com/p/django-evolution/

    在更改数据库之前安装它。然后运行

    python manage.py evolve --hint --execute
    

    确保如果您添加新字段,则允许空值 (null=True),否则 Evolution 会给您一条错误消息。

    【讨论】:

    • 如果我不想让新字段为空怎么办?我该怎么办?
    • 较新的 Django 版本内置了迁移功能。
    【解决方案3】:

    您需要重置您的数据库表(因为只是 syncdb 不会更新已经使用 null=False 创建的字段)

    ./manage.py 重置 your_app

    或者如果有一些您不想丢失的数据,请使用 SQL 命令删除 NOT NULL 标志

    【讨论】:

      猜你喜欢
      • 2016-04-25
      • 2019-01-04
      • 2011-03-05
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      • 2012-05-29
      相关资源
      最近更新 更多