首页 > 解决方案 > 如果在其他模型中继承,则 Django 中父模型中的相关名称

问题描述

我创建了一个可以在其他模型中继承的模型

父模型

class Edit_Lane_Info(models.Model):
    lane_info = models.OneToOneField(Edit_Lane, related_name='$(class)s', on_delete=models.CASCADE)

    def delete(self, *args, **kwargs):
        super().delete(*args, **kwargs)
        if self.lane_info:
            self.lane_info.delete()

    class Meta:
        abstract = True
class Status (Edit_Lane_Info, models.Model):  # parent class inherited
    ......

class Anpr(Edit_Lane_Info, models.Model): # parent class inherited
    ....
class Sensor_Details(Edit_Lane_Info, models.Model): # parent class inherited
    .............

现在我的问题是如何在 Edit_Lane_Info(parent model) 中唯一地传递related_name。我用过related_name='$(class)s,但不工作

Edit_Lane 模型


class Edit_Lane(models.Model):
    Anpr_Ip = models.GenericIPAddressField(default="NA")

标签: djangodjango-modelsdjango-orm

解决方案


您的related_name包含$而不是%

要解决此问题,当您使用 related_name 时,名称的一部分应包含%(app_label)sor%(class)s

编辑:

对于继承,您不需要从models.Model以下每个中继承: Status, Anpr,Sensor_Details 因为Edit_Lane_Info已经继承自models.Model

你应该这样

Edit_Lane_Info(models.Model)

class Status (Edit_Lane_Info):
class Anpr (Edit_Lane_Info):
class Sensor_Details (Edit_Lane_Info):

推荐阅读