以下面的例子为例:
class Manufacturer(models.Model):
name = models.CharField(max_length=200, blank=False)
slug = models.SlugField(max_length=200, blank=False, unique=True)
class Category(models.Model):
name = models.CharField(max_length=200, blank=False)
slug = models.SlugField(max_length=200, blank=False, unique=True)
class Product(models.Model):
category = models.ForeignKey(Category, related_name='products')
manufacturer = models.ForeignKey(Manufacturer, related_name='products')
name = models.CharField(max_length=50, blank=False)
slug = models.SlugField(max_length=200, blank=False, unique=True)
class CarMixin(models.Model):
color = models.CharField(max_length=50, blank=False)
num_wheels = models.IntegerField()
class CellPhoneMixin(models.Model):
screen_size = models.IntegerField()
class Car(Product, CarMixin):
pass
class Food(Product):
pass
class CellPhone(Product, CellPhoneMixin):
pass
我要做的是创建一个名为Product
的“基础”类,并使用Model Inheritance应用各种“子产品类型”。
我没有使用Django的“抽象模型继承”的原因是因为我实际上希望我的数据库中有一个表来容纳所有产品,因此我可以像Product.objects.all()
这样的查询来获取所有产品,然后键入product.car
以获取相关Car
对象的所有字段值。
但是,我遇到的问题是产品可能与Car
,Food
或CellPhone
中的任何一个产生关系。因此,如果product.car
与Food
有关系,我就无法Car
。无法知道Product对象具有哪种“关系”。它与Food
有关吗? CellPhone
? zend_extension="${PHP_PATH}ext\php_xdebug-2.5.5-7.1-vc14-nts.dll"
?
我该如何处理?我应该使用更好的数据库模式吗?