【问题标题】:Django: assigning a foreign key of class that hasn't been created yetDjango:分配尚未创建的类的外键
【发布时间】:2013-04-27 12:19:05
【问题描述】:

我有关系数据库,其中一个关系如下所示:

Student < --- > Major_enrollments

所以我需要为两个表中的第二个表创建一个带有外键的列。如果我定义类,例如,我怎么能这样做呢?学生第一,我会收到这样的错误通知:“NameError: name 'Major_enrollments' is not defined”。

这是我写的一段代码(models.py):

class Students(models.Model):

    nr_album = models.IntegerField()
    fName = models.CharField(max_length=70)
    lName = models.CharField(max_length=70)
    pesel = models.BigIntegerField()
    address = models.CharField(max_length=100)
    major_enrollments = models.ForeignKey(Major_enrollments) #<---THAT DOESN'T WORK

    def __unicode__(self):
        return unicode(self.pesel)


    class Meta:
        db_table='Students'

class Major_enrollments(models.Model):
    majors = models.ForeignKey(Majors)
    students = models.ForeignKey(Students)

    def __unicode__(self):
        return unicode(self.id)

    class Meta:
        db_table='Major_enrollments'

【问题讨论】:

    标签: python sql django


    【解决方案1】:

    您可以使用类名(作为字符串)而不是类本身:

    class Students(models.Model):
    
        nr_album = models.IntegerField()
        fName = models.CharField(max_length=70)
        lName = models.CharField(max_length=70)
        pesel = models.BigIntegerField()
        address = models.CharField(max_length=100)
        major_enrollments = models.ForeignKey('Major_enrollments')
    
        def __unicode__(self):
            return unicode(self.pesel)
    
    
        class Meta:
            db_table='Students'
    

    【讨论】:

    • +1,你也可以使用外部模块的'&lt;app_name&gt;.Major_enrollments'
    • 哇,我没想到会有这么快的回应,太好了:)).. 它有效,但我还需要在两个表中添加一个“相关名称”,所以它看起来像这样:major_enrollments = models .ForeignKey('Major_enrollments', related_name='Students_major_enrollments') 谢谢 :)))!!!!
    【解决方案2】:

    使用带有文档中描述的类名称的字符串:https://docs.djangoproject.com/en/1.5/ref/models/fields/#foreignkey

    【讨论】:

    • 您可以编辑@PavelAnossov 的答案以添加文档链接,而不是发布已经给出的答案
    猜你喜欢
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 2021-10-28
    • 2015-08-30
    • 1970-01-01
    相关资源
    最近更新 更多