Сериализатор Django Модель LeftJoin - PullRequest
0 голосов
/ 15 октября 2018

Привет, я новичок в Django, и я надеюсь, что кто-то может помочь мне с моей маленькой проблемой ^^

У меня есть такие модели:

class Article(model.Model):
   name = model.CharField(max_length=100)
   ...

class Stock(model.Model):
   article = models.ForeignKey(Article, on_delete=models.CASCADE, null=True)
   quantity = model.IntegerField(max_digits=10, default=1)
   quality = models.CharField(max_length=15, choices=[(tag.value, tag.value) for tag in States])
   ...

, и я хочу получить списоквсе статьи со всеми акциями, такими как

[{
  name: 'Bla',
  stock: [{
      quantity: 22,
      quality: 'good',
  }]
}]

Я получил представление:

class ArticleListView(ListAPIView):
  queryset = Article.objects.all()???
  serializer_class = ArticleStockSerializer
  permission_classes = (IsAuthenticated, HasAccess)

Но я не уверен, как его использовать

и такой сериализатор:

class ArticleStockSerializer(ArticleSerializer):
    stock = serializers.SerializerMethodField()

    def get_stock(self, obj):

        stock = StockSerializer()
        return stock

    class Meta(ArticleSerializer.Meta):
        model = Article
        fields = ArticleSerializer.Meta.fields + ('stock',)

Не работает, и я не могу найти правильный способ его использования.

Надеюсь, кто-то может мне помочь:)

спасибо и с уважением

XQP

1 Ответ

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

Вы должны попробовать с Сериализатор Вложенные отношения

class StockSerializer(serializers.ModelSerializer):
    class Meta:
        model = Stock
        fields = ('quantity', 'quality',)


class ArticleStockSerializer(ArticleSerializer):
    stocks = StockSerializer(many=True, read_only=True)

    class Meta(ArticleSerializer.Meta):
        model = Album
        fields = ArticleSerializer.Meta.fields + ('stocks',)
...