【问题标题】:Foreign key field is not being created in the database未在数据库中创建外键字段
【发布时间】:2017-10-08 23:19:19
【问题描述】:

我正在尝试将CommentUser 模型相关联,但不知何故,该字段并未在数据库中创建。当我尝试访问该页面时,显示以下错误:

(1054, "'字段列表'中的未知列'user_cmets.user_id'")

这些在models.py:

class User(models.Model):
    username = models.CharField(max_length=128)
    password = models.CharField(max_length=128)
    first_name = models.CharField(max_length=128)
    last_name = models.CharField(max_length=128)
    email = models.CharField(max_length=128)
    date_joined = models.DateField(auto_now_add=True)

    class Meta:
        db_table = 'auth_user'
        ordering = ('date_joined',)


class Comment(models.Model):
    user = models.ForeignKey('auth.User', related_name='comments', on_delete=models.CASCADE)
    content = models.CharField(max_length=256)
    date_created = models.DateField(auto_now_add=True)

    class Meta:
        db_table = 'user_comments'
        ordering = ('date_created',)

    def __str__(self):
        return self.content

    def save(self, *args, **kwargs):
        content = self.content

        super(Comment, self).save(*args, **kwargs)

如果我将user 变量命名为user_id,则在管理面板中创建新的Comment 时将显示一条错误消息user_id_id

** 更新**

我删除了整个数据库并删除了db_table 选项,因此user_id 已创建。但是现在,在创建新的Comment 后,以下内容:

IntegrityError at /admin/api/comment/add/
(1452, 'Cannot add or update a child row: a foreign key constraint fails (`softwarestore`.`api_comment`, CONSTRAINT `api_comment_user_id_14315666_fk_api_user_id` FOREIGN KEY (`user_id`) REFERENCES `api_user` (`id`))')

【问题讨论】:

  • 你跑makemigrationsmigrate了吗?
  • 是的,我做到了。请检查我的答案。

标签: mysql django foreign-keys django-rest-framework


【解决方案1】:

您是否尝试过简单地替换以下内容:

 user = models.ForeignKey('auth.User', related_name='comments', on_delete=models.CASCADE)

   user = models.ForeignKey(User, related_name='comments', on_delete=models.CASCADE)

然后运行 ​​makemigrations?

【讨论】:

  • 是的,刚刚做了,仍然没有区别。
  • 您能否运行python manage.py makemigrations <app_name> 或删除迁移文件夹并重新启动它?
  • 奇数。一样。但是在运行makemigrations 时,我读到“- 添加字段用户以发表评论”。
  • 我删除了数据库,删除了Meta 中的db_table 选项并将User 更改为auth.User,再次运行所有内容后它工作正常,创建了user_id。现在,保存新的Comment 后,我收到IntegrityError 说外键约束失败。
  • 我认为您在序列化程序中也使用了idid 在创建新对象时自动递增。您在编写 API 时是否将其放入序列化程序中?
猜你喜欢
  • 2021-11-07
  • 2021-06-28
  • 2018-10-10
  • 2013-03-01
  • 2019-07-02
  • 2015-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多