【问题标题】:Django Serializer Model LeftJoinDjango 序列化器模型 LeftJoin
【发布时间】:2019-03-19 22:43:07
【问题描述】:

嗨,我是 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

【问题讨论】:

    标签: django api model left-join


    【解决方案1】:

    你应该试试Serializer Nested relationships

    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',)
    

    【讨论】:

    • 我试过了,但无法正常工作,结果是 json 缺少库存
    • 尝试将related_name='stocks' 添加到article = models.ForeignKey
    • 是的,这是缺少的部分:D thx
    猜你喜欢
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 2012-11-16
    相关资源
    最近更新 更多