【问题标题】:Get reverse model foreign key object for inherited object获取继承对象的反向模型外键对象
【发布时间】:2017-11-16 20:34:55
【问题描述】:

我有以下模型,其中引用了一个对象和一个它继承自的对象:

class Employee(models.Model):  
    user = models.OneToOneField(User, blank=True, null=True)  
    entity = models.ForeignKey('companies.Entity', blank=True, null=True)
    brand = models.OneToOneField('companies.Brand', related_name='brand', blank=True, null=True)

class Entity(models.Model):
    name = models.CharField('Name', max_length=255, db_index=True) 

class Brand(Entity):  
    company_name = models.CharField(max_length=128, blank=True, null=True)

问题是当我尝试引用反向关系时,我无法仅访问品牌实体。我想让员工与品牌相关联。我试过这个:

brands = Brand.objects.filter(pk=2)

for b in brands:
    print b.employee_set.all().query

它输出:

SELECT * FROM `employee` WHERE `employee`.`entity_id` = 2

我希望它输出:

SELECT * FROM `employee` WHERE `employee`.`brand_id` = 2

【问题讨论】:

    标签: django django-models django-inheritance


    【解决方案1】:

    在你的模型文件中,你定义实体和品牌的方式称为多表继承,django会自动创建实体和品牌之间的OneToOneField关系,但是在你的员工模型中,实体是你的外键,但品牌与你的员工有onetoonefield模型,这是行不通的。您可以通过在 Entity 上使用 parent_link=True 声明您自己的 OneToOneField 来覆盖该字段,因此实体和品牌之间没有 oneToOneField 关系,请查看此内容以了解详细信息:https://docs.djangoproject.com/en/1.11/topics/db/models/#multi-table-inheritance。希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2011-07-07
      • 1970-01-01
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-20
      相关资源
      最近更新 更多