【问题标题】:Conditional fields serializer Django条件字段序列化程序 Django
【发布时间】:2021-11-08 14:28:13
【问题描述】:

我有这样的看法:

class UserDetail(generics.RetrieveDestroyAPIView):
    permission_classes = [IsAuthenticatedOrReadOnly]
    queryset = User.object.all()
    serializer_class = UserSerializer

    def get_object(self, queryset=None, **kwargs):
        item = self.kwargs.get('pk')
        return generics.get_object_or_404(User, id=item)

这样的序列化器:

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['id', 'first_name', 'last_name', 'city']

和这样的网址:

path('<uuid:pk>', UserDetail.as_view(), name='user_detail')

我是否可以只使用一个视图和一个序列化程序在一种情况下获取所有数据(id、fist_name、last_name 和 city),而在另一种情况下只使用 json 获取城市?或者也许我必须为它创建一个特别是这样的新视图和序列化器:

class UserCity(generics.RetrieveDestroyAPIView):
    permission_classes = [IsAuthenticatedOrReadOnly]
    queryset = User.object.all()
    serializer_class = UserJustCitySerializer

    def get_object(self, queryset=None, **kwargs):
        item = self.kwargs.get('pk')
        return generics.get_object_or_404(User, id=item)

和

class UserJustCitySerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['city']

【问题讨论】:

  • 你能说出你想要列出数据的条件吗?
  • 我只需要在一个子页面上显示所有用户信息,而在另一个子页面上只显示城市

标签: django serialization django-rest-framework view


【解决方案1】:

你可以试试SerializerMethodField。如果您的 get_your_conditional_field 方法中的条件为真,它将返回该字段。

class YourSerializer(serializers.ModelSerializer):
    your_conditional_field_name = serializers.SerializerMethodField()

    class Meta:
        model = model_name

    def get_your_conditional_field(self, obj):
        # do your conditional logic here
        # and return appropriate result
        return obj

【讨论】:

    猜你喜欢
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多