如何创建“知道”它是什么类别的django数据库模型?

时间:2012-08-10 04:49:31

标签: python django django-models

在Django中,我有以下models.py

class Product(RandomPrimaryIdModel):
  title = models.CharField(max_length=20, blank=True, null=True)
  price = models.CharField(max_length=20, blank=True, null=True)
  condition = models.CharField(max_length=20, blank=True, null=True)

class Mattress(Product):
  length = models.CharField(max_length=50)
  size = models.CharField(max_length=5)

class Pillow(Product):
  shape= models.CharField(max_length=50)
  comfort= models.CharField(max_length=5)     

这个想法是有一个“产品”模型和几个“product_type”模型。我正在尝试创建一个与这两者相关的数据库方案。最终目标是当我访问其product_type未知的对象的主要ID时,我可以简单地查询/过滤该对象以找出该对象的product_type。

我知道这听起来有点令人困惑,但我将如何实施正确的方法呢?目前的方案(上面的方案)不是我认为的正确解决方案。

2 个答案:

答案 0 :(得分:1)

根据docs on multi-table inheritance,您可以引用模型的小写名称。在您查找“产品类型”的情况下,您可以执行以下操作:

product = Product.objects.get(id=12)
try:
    mattress = product.mattress
    is_mattress = True
except Mattress.DoesNotExist:
    is_mattress = False

你可以将它抽象为一个帮助器方法,它会为你做测试并将类型作为字符串或某种枚举返回。

答案 1 :(得分:0)

如果你有一个对象的引用,你不能使用类似的东西:

p = Product.objects.get(id=1)

class_of_p = str(p.__class__)

然后解析生成的字符串

"<class 'whatever.models.Pillow'>"

找到你需要的东西?抱歉,如果我遗失了什么。