Вложенные данные сериализатора в django rest framework - PullRequest
0 голосов
/ 21 октября 2019

У меня есть 3 модели django, подобные этой

Для ведения учета заказов

class Orders(models.Model):
    restaurant = models.ForeignKey(Restaurant, on_delete=models.CASCADE, blank=True, null=True)
    total_amount = models.DecimalField(max_digits=10, decimal_places=2)

какие товары в порядке как пицца и т. Д.

class OrderArticle(models.Model):
    order = models.ForeignKey(Orders, on_delete=models.CASCADE)
    article = models.ForeignKey(Articles, on_delete=models.CASCADE)

Варианты артикулов статей по порядку (например, топинг на пиццу, теперь топинг может быть 4 или более типов)

class OrderArticleOptions(models.Model):
    article_option = models.ForeignKey(ArticlesOptions, on_delete=models.CASCADE)
    order_article = models.ForeignKey(OrderArticle, on_delete=models.CASCADE)
    quantity = models.IntegerField(default=1)
    price = models.DecimalField(max_digits=10, decimal_places=2)

Чтобы отслеживать этоТип статьи несколько вариантов я сделал эту таблицу. Так что пример будет. Клиент купил пиццу с 2-мя начинами, 1-ое количество фахиты - 1, и 2-ое количество оливы - 3.

, чтобы получить этот вариант использования с использованием инфраструктуры Django Restя должен делать ?

Выпуск

Мне нужны такие данные

data {

orders[

 article1
     {
      articleoptio1
       {}
      articleoption2
       {}        
      }

]

}

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

Ответы [ 2 ]

1 голос
/ 22 октября 2019
class ArticlesSerializer(ModelSerializer):
    class Meta:
        model = Articles
        fields = "__all__"


class OrderSerializer(ModelSerializer):
    articles = ArticlesSerializer(source="resturant.article", many=True)
    class Meta:
        model = Orders
        fields = "__all__"

Хорошо, здесь я использую вложенный сериализатор с ключом «source». «источник» - это немного продвинутая концепция, извините за использование этого, но я не вижу другого оптимального пути. Вы можете вызывать сериализатор из ваших представлений.

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

https://www.youtube.com/watch?v=rAJAC_P52VU

0 голосов
/ 22 октября 2019

Попробуйте Nested Serializer, это решит вашу проблему. См. Вложенные документы по сериализатору.

https://www.django -rest-framework.org / api-guide / serializer / # имея дело с вложенными объектами

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