django:查询ManyToMany属性调用多表继承

时间:2012-10-30 20:25:04

标签: django inheritance orm many-to-many generics

我已阅读somerelatedquestions,但目前尚不清楚我的案例最佳做法是什么。 我是一个试图学习的数据库n00b,所以耐心受到赞赏。我的情况如下:

  • 3种类型的公司:制造商,经销商,ServiceNRepair(共享约10个属性)
  • 5种产品:StuffedAnimals,Bicycles,Barbies(也分享一些属性)

所以为了保持DRY,我尝试了多表继承:

# company.models.py

class GenericCompany(models.Model):
    name, description, address, etc

class Manufacturer(GenericCompany): #can manufacture different things
    stuff_specific_to_manufacturers
    product = models.ManyToMany(GenericProduct)

class Reseller(GenericCompany): #can sell different things
    stuff_specific_to_manufacturers
    product = models.ManyToMany(GenericProduct)

etc for ServiceNRepair

和产品类似,

# product.models.py

class GenericProduct(models.Model):
    name, price, color, etc

class StuffedAnimal(GenericProduct):
    fluffyness, ears_or_not, etc


class Bicycle(GenericProduct):
    wheel_diameter, weight, etc


etc for Barbies

现在我需要执行像

这样的查询
  • 显示所有红色产品(这很容易)
  • 该制造商生产哪些产品?
  • 查找经销商X销售的所有自行车

但是我可以用M2M这样做吗? Manufacturer.objects.filter(product_icontains ='something')这样的事情是行不通的。那么,我完全走错了路?是使用ContentTypes的典型解决方案吗?我想就接下来要研究的问题找一些方向来解决这个问题,这肯定是很常见的。任何提示赞赏。谢谢。

1 个答案:

答案 0 :(得分:0)

您可以执行Manufacturer.objects.filter(product__name__icontains='something')之类的操作,只需在Product中添加字段名称。