Python 如何创建django数据库模型;“知道”;这是什么类别?
在Django中,我有以下模型.pyPython 如何创建django数据库模型;“知道”;这是什么类别?,python,django,django-models,Python,Django,Django Models,在Django中,我有以下模型.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=T
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)
这个想法是有一个“产品”模型和几个“产品类型”模型。我正在尝试创建一个将这两者联系起来的数据库方案。最终目标是,当我为产品类型未知的对象授予访问主id的权限时,我可以简单地查询/过滤该对象,以找出该对象的产品类型
我知道这听起来有点令人困惑,但我该如何实施正确的方法呢?我认为目前的方案(上述方案)不是正确的解决方案 根据,您可以引用模型的小写名称。在您的情况下,要找到“产品类型”,您可以执行以下操作:
product = Product.objects.get(id=12)
try:
mattress = product.mattress
is_mattress = True
except Mattress.DoesNotExist:
is_mattress = False
p = Product.objects.get(id=1)
class_of_p = str(p.__class__)
您可以将其抽象为一个helper方法,该方法将为您执行测试,并以字符串或某种枚举的形式返回类型。如果您有一个对象的引用,您不能使用类似于:
product = Product.objects.get(id=12)
try:
mattress = product.mattress
is_mattress = True
except Mattress.DoesNotExist:
is_mattress = False
p = Product.objects.get(id=1)
class_of_p = str(p.__class__)
然后解析结果字符串
"<class 'whatever.models.Pillow'>"
“”
找到你需要的东西?如果我遗漏了什么,请道歉。最好不要为
CharField
使用null=True
,参考:“除非有充分的理由,否则不要在基于字符串的字段(如CharField和TextField)上使用null…”一旦获得产品类型,您将怎么做?将这种行为作为产品类型的方法来实现不是更好吗?例如,床垫的“描述”方法将使用其长度和尺寸,枕头的“描述”方法将使用其形状和舒适度。这样代码就不会关心它是什么类型的对象,它只会得到它的描述。通常在OO框架中对类进行显式测试是一个危险信号。。。