Промежуточная таблица сериализации «многие ко многим» в Django Rest Framework - PullRequest
0 голосов
/ 12 сентября 2018

Я хотел бы узнать, как получить много ко многим данным сериализатора промежуточной таблицы по целому model, а не только по id.

#this is my model class
class ProductMaterial(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    material = models.ForeignKey(Material, on_delete=models.CASCADE)
    material_rate = models.FloatField(blank=True, null=True)
    material_price = models.FloatField(blank=True, null=True)



#serializer
class ProductMaterialSerializer(serializers.ModelSerializer):
       class Meta:
           model = ProductMaterial
           fields = '__all__'

Это возвращает:

    {
        "id": 1,
        "material_rate": 0.3,
        "material_price": 6.7,
        "product": 186,
        "material": 7
    },
   {
        "id": 2,
        "material_rate": 0.7,
        "material_price": 1.7,
        "product": 186,
        "material": 8
    },

Проблемы:

  1. Первая проблема заключается в дублировании данных из-за множества таблиц
  2. . Я хочу также просмотреть свои поля модели product и material.

Моя цель:

{
    "id": 1,
    "product": {
                 "name" : "abcd",
                 "date" : "01.01.2018"

                },
    "material": [
                  {
                     "id" : 7,
                     "material_rate" : 0.3,
                     "material_price" : 6.7,

                  },
                  {
                     "id" : 8,
                     "material_rate" : 0.7,
                     "material_price" : 1.7,

                  },
               ]
},

Решение 2:

Я реализовал это решение -> https://stackoverflow.com/a/45834689/5491260, и оно мне помогло.

1 Ответ

0 голосов
/ 12 сентября 2018

Из документа

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

Итак, используйте depth=1 в мета-классе

class ProductMaterialSerializer(serializers.ModelSerializer):
       class Meta:
           model = ProductMaterial
           fields = '__all__'
           <b>depth = 1</b>
...