Django REST框架:备用字段名称

时间:2018-10-09 07:31:20

标签: python django django-models django-rest-framework

我正在尝试创建一个通用模型,该模型将包含产品名称,其选项和价格。这是我要发送的示例json。

{
    "product": "jacket",
    "options": {
       "color": ["purple"],
       "size": ["s", "m", "l"],
       (I want the ability to add unlimited strings here)
       },
   "price": 234
}

我的问题是我需要归纳颜色和尺寸。 IE,选项应包含CharFieldoption_name,可以重复使用具有唯一值的不同选项名称来重复这些选项。有没有办法使用更多数据表或内置的Django REST功能来做到这一点?

1 个答案:

答案 0 :(得分:0)

也许您应该考虑将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,但具有有关产品可能选项的所有信息。