0

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

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
4

1 回答 1

0

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

于 2017-11-16T20:59:23.423 回答