Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何创建django数据库模型;“知道”;这是什么类别?_Python_Django_Django Models - Fatal编程技术网

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

Python 如何创建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

在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=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框架中对类进行显式测试是一个危险信号。。。