Django REST Framework: альтернативные имена полей - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь создать универсальную модель, которая будет брать название продукта, его параметры и цену.Вот пример JSON, который я хочу отправить.

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

Моя проблема в том, что мне нужно обобщить цвет и размеры.То есть опции должны содержать CharField, option_name, которые могут повторяться снова и снова с разными именами опций с уникальными значениями.Есть ли способ сделать это, используя больше таблиц данных или встроенную функциональность Django REST?

1 Ответ

0 голосов
/ 09 октября 2018

Возможно, вам следует подумать о том, чтобы сделать 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, но содержит всю информацию о возможных вариантах продукта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...