在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。
我知道这听起来有点令人困惑,但我将如何实施正确的方法呢?目前的方案(上面的方案)不是我认为的正确解决方案。
答案 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'>"
找到你需要的东西?抱歉,如果我遗失了什么。