如何在Django模型中为外键字段创建可查询别名?

时间:2016-04-28 17:17:43

标签: python django django-models

我有一系列模型,其中包含要迁移到FK的字段。

之前

class Sizing(models.Model:
    btu_hour = models.IntegerField()
    flange = models.ForeignKey('parts.Router')

class Sizing(models.Model):
    btu_hour = models.IntegerField()
    configuration = models.ForeignKey(Configuration)
    ### WHAT I'D LIKE; alias only ###
    flange = Alias(to='configuration__flange')

class Configuration(models.Model)
    flange = models.ForeignKey('parts.Router')

假设我的视图中有查询在flange字段上进行查询,我该如何创建别名?我有许多模型正在以上述方式重组,并希望使用此方法,以便我不必在视图等中替换该字段的每次使用。

会感激任何指针;关于模型别名的所有信息我发现只适用于相同模型字段。

2 个答案:

答案 0 :(得分:1)

最简单的解决方案是创建@property

class Sizing(models.Model):
    btu_hour = models.IntegerField()
    configuration = models.ForeignKey(Configuration)

    # define the property flange
    @property
    def flange(self):
        return self.configuration.flange

然后,在任何视图中,如果您有sizing_obj.flange,则根本不会受到影响。

但是,您无法在查询集或过滤器等中使用它。

答案 1 :(得分:0)

aliasName = models.ForeignKey(modelName, to_field='fieldName', on_delete=models.CASCADE)

这是Django外键中别名的格式

class Sizing(models.Model):
    btu_hour = models.IntegerField()
    configuration = models.ForeignKey(Configuration)
    ### WHAT I'D LIKE; alias only ###
    flangeNew = models.ForeignKey(Configuration, to_field='flange', on_delete=models.CASCADE)

class Configuration(models.Model)
    flange = models.ForeignKey('parts.Router')

这是新版本Django中别名的解决方案