簡體   English   中英

Django Rest Framework中的get_FIELD_serializer

[英]get_FIELD_serializer in Django Rest Framework

我處於一種要根據條件更改序列化器字段的情況。 條件不重要,但我希望能夠在串行器字段之間進行切換,如下例所示:

class EntrySerializer(serializers.ModelSerializer):
    # author defined from ModelSerializer

    def get_author_serializer(self):
        request = self.context.get('request')
        GET = getattr(request, 'GET', {})
        if request and GET and GET.get('include_author')=='true':
            author_serializer = UserSerializer()
        else:
            author_serializer = serializers.PrimaryKeyRelatedField(
                read_only=True, default=serializers.CurrentUserDefault()
            )
        return author_serialize

當然,這不起作用,因為get_FIELD_serializer不存在,但是我正在尋找可以做到這一點的最簡單的解決方案。

我曾嘗試過天真的嘗試將author寫為財產,但沒有成功。

我知道我可以編寫多個EntrySerializers並使用get_serializer_class但這對於這么小的定制來說實在太多了。

如果只想根據條件更改序列化器的字段,則可以執行以下操作。

class MySerializer(serializers.ModelSerializer):
    author = serializers.SerializerMethodField()

    def get_author(self, instance):
        # your condition here
        if your_condition:
            return instance.author
        return 'hello'

檢查文檔中的SerializerMethodField

https://www.django-rest-framework.org/api-guide/fields/#serializermethodfield

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM