0

在 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 未知的对象的主 ID 的访问权限时,我可以简单地查询/过滤该对象以找出该对象的 product_type 是什么。

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

4

2 回答 2

1

根据关于多表继承的文档,您可以引用模型的小写名称。在您的情况下,要找出“产品类型”,您可以执行以下操作:

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

您可以将其抽象为一个辅助方法,该方法将为您进行测试并将类型作为字符串或某种枚举返回。

于 2012-08-10T05:07:50.940 回答
0

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

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

class_of_p = str(p.__class__)

然后解析结果字符串

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

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

于 2012-08-10T16:25:49.140 回答