【问题标题】:Django: Add foreign key in same model but different classDjango:在相同模型但不同类中添加外键
【发布时间】:2018-09-04 05:09:20
【问题描述】:

我是 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)

【问题讨论】:

    标签: python django foreign-keys


    【解决方案1】:

    你不需要使用self,只留下类名Student

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

    如果您需要获取当前实例的属性,请使用selfself.some_attribute,查看此question 了解更多详情。

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

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

    称为lazy关系,在相关模型尚未定义时很有用。

    【讨论】:

    • 好的。这应该有效。我以为我必须使用 Django 的通用关系
    【解决方案2】:

    你实际上不需要使用 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' or '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?

    【讨论】:

      猜你喜欢
      • 2015-08-30
      • 2021-09-23
      • 2020-12-23
      • 2018-07-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 2023-02-04
      相关资源
      最近更新 更多