【问题标题】:Django create a relationship on a model that has not yet been definedDjango 在尚未定义的模型上创建关系
【发布时间】:2016-07-04 09:10:21
【问题描述】:

我是一个新手,我想问一些可能听起来很基础的东西,我刚刚阅读了 Django 1.9 文档,内容是在尚未定义的模型上创建关系,它说“你可以使用模型的名称,而不是模型对象本身”,而不是我尝试,这是我的代码:

@python_2_unicode_compatible
class Student(models.Model):
    name=models.CharField(max_length=50)
    teachers=models.ForeignKey('Teacher')

def __str__(self):
    return self.name

@python_2_unicode_compatible
class Teacher(models.Model):
    name=models.CharField(max_length=50)

def __str__(self):
    return self.name

当我尝试保存 Student 对象时,它给了我这样的错误: “操作错误:表 latihan_student 没有名为 Teachers_id 的列” 谁能解释一下非常感谢。对不起我的英语不好

【问题讨论】:

    标签: django python-2.7


    【解决方案1】:

    这与您如何定义 ForeignKey 无关。您在表格中添加了一个字段;您需要迁移数据库。

    【讨论】:

    • 是的,我刚刚进行了迁移 ./manage.py makemigrations [my app]、./manage.py sqlmigrate [my app] 0001 和 ./manage.py migrate。然后我再次尝试保存学生对象,它再次给我一个错误“IntegrityError:NOT NULL 约束失败:latihan_student.teachers_id”。我只是好奇如何为尚未定义的模型建立关系.....
    • 我觉得你很困惑。文档正在讨论编写模型,以便您可以在它指向的模型之前定义 ForeignKey 字段。我认为您正在谈论与尚未定义的实例建立关系,这显然是不可能的。
    • 是的,你是对的......我没有制作任何我认为会导致最新错误的教师对象,然后我制作了一个教师对象,并且我在我的外键关系中添加了一个关键字参数( null=True),我做到了....非常感谢您
    【解决方案2】:

    如下更新您的教师模型:

    @python_2_unicode_compatible
    class Teacher(models.Model):
        name=models.CharField(max_length=50)
        teachers = models.CharField(max_length=50)
    

    现在您可以在其他模型中使用和创建它的对象。您遇到另一个错误,因为在创建对象后,它已经在数据库中输入了您没有说 null=True 的条目,因此您遇到了完整性错误,因此请为您遇到完整性错误的字段添加 null=True 。

    【讨论】:

      猜你喜欢
      • 2011-02-15
      • 1970-01-01
      • 2019-12-05
      • 2020-05-22
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 2015-07-31
      相关资源
      最近更新 更多