【问题标题】:What is the default type for a user in Django?Django 中用户的默认类型是什么?
【发布时间】:2016-03-26 12:35:17
【问题描述】:

我有一个 MySQL 数据库对象,用于存储用户计划在某个日期参加的音乐会。由于每个 Concert 条目都需要与一个 User 相关联,因此我为 User 添加了一个外键字段作为 Concert 模型的属性。这是完整的模型:

class Concert(models.Model):
    user = models.ForeignKey(User, on_delete = models.CASCADE)
    concert_name = models.CharField(max_length = 120, blank = True, null = True)
    venue = models.CharField(max_length = 120, blank = True, null = True)
    city = models.CharField(max_length = 120, blank = True, null = True)
    state = models.CharField(max_length = 120, blank = True, null = True)
    country = models.CharField(max_length = 120, blank = True, null = True)
    timestamp = models.DateTimeField(auto_now_add = True, auto_now = False)
    updated = models.DateTimeField(auto_now_add = False, auto_now = True)

当我尝试迁移到数据库时,我收到一条消息:You are trying to add a non-nullable field 'user' to concert with out a default; 本质上是说已经填充的行需要有一个值。我发现this SO post 似乎正在解决类似的问题,但解决方案中建议的默认值是用于字符域,我认为这在这种情况下并不适用。我应该如何设置 User 对象的默认值?

【问题讨论】:

  • 传递一个整数;在实际表中,该列是用户表的外键。

标签: python mysql django database database-migration


【解决方案1】:

你可以使用null=True:

user = models.ForeignKey(User, null=True)

虽然如果您查看您的数据库实际模型,您看不到实际的外键,当您将 models.ForeignKey(User) 放入模型中时,您可以在您的数据库中看到带有引用的 user_id,但所需的关系存在,所以您可以将 null=True 作为默认值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 2010-12-06
    • 2014-09-30
    • 1970-01-01
    • 2020-05-25
    • 2019-09-18
    相关资源
    最近更新 更多