代码之家  ›  专栏  ›  技术社区  ›  Flux

抽象模型中OneToOne字段的反向访问

  •  0
  • Flux  · 技术社区  · 6 年前

    假设我有以下数据库结构:

    class Asset(models.Model):
        # ...
    
    class AbstractBuilding(models.Model):
        asset = models.OneToOneField(Asset, on_delete=models.CASCADE, primary_key=True)
        # ...
    
        class Meta:
            abstract = True
    
    
    class Office(AbstractBuilding):
        # ...
    
    
    class Lab(AbstractBuilding):
        # ...
    
    
    class PowerPlant(AbstractBuilding):
        # ...
    

    Office 对象,很容易得到相应的 Asset 通过一对一字段(例如。 office_object.asset 返回 ). 但是,假设我有一个 资产 相反。如何获得相应的 办公室 Lab PowerPlant )从 资产 反对?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Nader Alexan    6 年前
    # You have an instance of Asset e.g.
    asset = Asset.objects.first()
    
    office = getattr(asset, "office") # gives you related office if it is related to office
    
    lab = getattr(asset, "lab") # gives you related lab if it is related to lab
    
    power_plant = getattr(asset, "powerplant") # gives you related powerplant if it is related to powerplant