抽象类作为外键

时间:2016-05-02 12:47:01

标签: python django model-view-controller django-models

我试图创建课程运动与科之间的关系。每个部分都必须选择一个运动之王(班级运动由普通/公共汽车/火车等扩展)。而且我得到的错误是“字段定义了与模型的关系'运动',它既没有安装,也没有抽象。”有办法吗?从我读到现在,没有好办法,或者我错了?

我的课科:

class Section(RoadElements):
    locomotion = models.ForeignKey(Locomotion, on_delete=models.CASCADE)
    def __init__(self, *args, **kwargs):
        super(Section, self).__init__(*args, **kwargs)

    def __str__(self):
        return self.name

扩展了类RoadElements,也是抽象的。

我对运动的定义:

class Locomotion(models.Model):
    transportation_firm_name = models.CharField(max_length=200)
    transportation_number = models.CharField(max_length=200)
    departure_date_time = models.DateTimeField()
    arrival_date_time = models.DateTimeField()
    reservation = models.BooleanField(default=False)

    class Meta:
        abstract = True

课程延伸,例如:

class Plain(Locomotion):
    seat_number = models.CharField(max_length=200)
    class_section = models.CharField(max_length=200)

1 个答案:

答案 0 :(得分:1)

您不能拥有抽象基类的外键,因为该类没有数据库表。在您的示例中:将有一个数据库表,其中包含Plain个实例的行,但没有Locomotion的表。

通常的方法是使用Generic Foreign Key指向其中一个子类。