【问题标题】:Django REST Framework: Alternate Field NamesDjango REST 框架:备用字段名称
【发布时间】:2018-10-09 07:31:20
【问题描述】:

我正在尝试创建一个包含产品名称、选项和价格的通用模型。这是我要发送的示例 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 功能来做到这一点?

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多