我是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)
答案 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?