【问题标题】:django REST framework - limited queryset for nested ModelSerializer based on requesting userdjango REST framework - 基于请求用户的嵌套 ModelSerializer 的有限查询集
【发布时间】:2018-02-28 04:59:14
【问题描述】:

如何根据请求用户使用自定义模型序列化器限制相关字段的查询集? 我已经用 SerializerMethodField 实现了这个,但它似乎不是最好的解决方案:

class TourSerializer(serializers.ModelSerializer):
   """
   Returns a list of tour objects.
   """

   orders = serializers.SerializerMethodField()

   class Meta:
      model = Tour
      fields = (
         'id', 'orders'
       )

   def get_orders(self, obj):
       orders = Order.objects.visible_for_me(self.context['request'].user).filter(tour=obj)
       serializer = OrderSerializer(orders, many=True)
       return serializer.data

【问题讨论】:

    标签: django api serialization django-rest-framework


    【解决方案1】:

    您可以覆盖序列化程序的 __init__() 方法:

    class YourModelSerializer(serializers.ModelSerializer):
        .....
        .....
    
        def __init__(self, *args, **kwargs):
            super(YourModelSerializer, self).__init__(*args, **kwargs)
            user = self.context['request'].user
            # Limit according to your need, whatever. 
            self.fields['field_name'].queryset = Model.objects.filter(user=user)
    

    【讨论】:

    • 感谢您的回复。这将限制我的主要模型的查询集。但我需要限制相关模型的查询集。
    • 您可以将field_name更改为您的相关模型并限制查询集。
    • 恐怕我没听懂你在问什么。你能用一个简单的例子来解释你的问题吗?
    • “嵌套”字段不使用查询集。您的解决方案不适用于此问题。
    猜你喜欢
    • 2014-10-08
    • 2021-03-17
    • 2020-06-21
    • 2023-01-08
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 2014-11-09
    • 1970-01-01
    相关资源
    最近更新 更多