Вы можете создать отдельную модель, которая позволяет вводить пустые / нулевые значения для каждого поля.Или используйте наследование модели django, если вы настраиваете типы продуктов, которые имеют сходные желаемые атрибуты или попадают в категории.Кажется, что вы запрашиваете необязательные атрибуты, которые просто потребуют от вас определить необязательные поля в модели (первый пример).
null ref
, пустоref
Без наследования:
class Product(models.Model):
name = models.CharField()
image = models.ImageField(blank=True, null=True)
weight = models.DecimalField(blank=True, null=True)
Наследование ref
:
class Product(models.Model):
name = models.CharField()
class Meta:
abstract = True
class ProductTypeA(Product):
image = models.ImageField()
class ProductTypeB(Product):
weight = models.DecimalField()
редактировать:
читать об отношениях в docs
и docs
class Product(models.Model):
name = models.CharField()
class ProductImage(models.Model):
product = models.ForeignKey(Product)
image = models.ImageField()
class ProductWeight(models.Model):
product = models.ForeignKey(Product)
weight = models.DecimalField()
class ProductURL(models.Model):
product = models.ForeignKey(Product)
url = models.URLField()
class ProductFile(models.Model):
product = models.ForeignKey(Product)
file = models.FileField()
ProductXXXXX связаны с моделью продукта внешним ключом.Это отношения один ко многим, поэтому для каждого продукта вы можете иметь много productxxxx.
Например, вы можете создать продукт:
product_one = Product(name="product_one")
product_one.save()
Теперь вы хотите добавить веск этому продукту:
weight = ProductWeight(product=product_one, weight=3.55)
weight.save()
Чтобы увидеть все веса, связанные с продуктом:
product_one_weights = product_one.weight_set.all()
for weight in product_one_weights:
print weight
Это позволяет вам иметь продукты с различными "атрибутами".
product_one
|
-----------------------------------------
| | | |
ProductWeight ProductImage ProductImage ProductFile
product_two
|
--------------
| |
ProductURL ProductImage