Django:在同一个模型中添加外键但不同的类

时间:2018-03-26 06:07:53

标签: python django foreign-keys

我是Django的新手。如何在不同类的相同模型中添加外键?

from django.db import models

class Student(models.Model):
    name = models.CharField(max_length=20)
    address = models.CharField(max_length=200)

class Player(models.Model):
    student = models.ForeignKey(
        self.Student, #?
        on_delete = models.CASCADE,
    )
    sports_name = models.CharField(max_length=20)

2 个答案:

答案 0 :(得分:1)

您不需要使用self,只需保留班级名称Student

class Player(models.Model):
    student = models.ForeignKey(
        Student,
        on_delete = models.CASCADE,
    )
    sports_name = models.CharField(max_length=20)

如果您需要获取当前实例的属性self,请使用self.some_attribute,请查看此question以获取更多详细信息。

您也可以将模型名称作为字符串传递:

class Player(models.Model):
    student = models.ForeignKey(
        'Student',
        on_delete = models.CASCADE,
    )
    sports_name = models.CharField(max_length=20)

当相关模型尚未定义时,它被称为lazy关系并且非常有用。

答案 1 :(得分:0)

您实际上并不需要使用self.Student.Use this

class Student(models.Model):
    name = models.CharField(max_length=20)
    address = models.CharField(max_length=200)

class Player(models.Model):
    student = models.ForeignKey(self.Student, on_delete=models.CASCADE, null=True, blank=True)
    sports_name = models.CharField(max_length=20)

别忘了使用

  

python manage.py makemigrations和python manage.py migrate

在完成模型更改后。

在某些时候 - 你可能想要使用相同的模型来拥有ForeignKey字段。为此,您可以使用self或当前模型将其作为外键('self'或'Player')作为字符串

class Student(models.Model):
    name = models.ForeignKey(models.CharField(max_length=20))
    address = models.CharField(max_length=20)
    related_student = models.ForeignKey(Student, on_delete = models.CASCADE, null=True, blank=True)

对于此示例,您可以参考。 Can I Make a foreignKey to same model in django?