Возможно, вам следует подумать о том, чтобы сделать Option
отдельной таблицей и связать ее с вашей таблицей Product
с помощью внешнего ключа.Другими словами, у продукта может быть много вариантов.
class Product(models.Model):
product_name = models.CharField(max_length=100)
price = models.IntegerField()
class Option(models.Model):
color = models.CharField(max_length=100)
size = models.CharField(max_length=100)
product = models.ForeignKey(Product) # an option is associated with a product
Так что теперь вам не нужна «универсальная модель».Product
ваша основная модель.Затем вы можете определить ваши сериализаторы следующим образом:
class OptionSerializer(serializers.ModelSerializer):
class Meta:
model = Option
fields = ('color', 'size')
class ProductSerializer(serializers.ModelSerializer):
options = OptionSerializer(source='option_set', many=True)
class Meta:
model = Product
fields = ('product_name', 'price', 'options')
Теперь, когда вы извлекаете экземпляр Product
, он имеет следующую информацию:
var product = {
"product_name": "jacket",
"price": 123,
"options": [
{"color": "purple", "size": "l"},
{"color": "red", "size": "s"},
...
]
}
Это меняет ваш запланированный json, но содержит всю информацию о возможных вариантах продукта.