Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django DRF-序列化方法字段_Django_Django Rest Framework - Fatal编程技术网

Django DRF-序列化方法字段

Django DRF-序列化方法字段,django,django-rest-framework,Django,Django Rest Framework,我有一个API视图,如下所示:- class ProfileAPI(generics.RetrieveAPIView): serializer_class = ProfileSerializer def get_object(self): try: return Profile.objects.get(user=self.request.user) except: return None

我有一个API视图,如下所示:-

class ProfileAPI(generics.RetrieveAPIView):
    serializer_class = ProfileSerializer

    def get_object(self):
        try:
            return Profile.objects.get(user=self.request.user)
        except:
            return None
            # I don't raise NotFound here for a reason.
            # I don't want a 404 response here, but a custom HTML response, explained below.



class ProfileSerializer(serializers.ModelSerializer):

    html = serializers.SerializerMethodField()

    def get_html(self, obj):
        # some custom HTML response based on whether the user obj is `None` or not.
        if not obj:
            return NOT_LOGGED_IN_HTML

        return CUSTOM_HTML

    class Meta(object):
        model = Profile
        fields = ('html',)

现在,当用户登录时,我在响应中获得
html
键。但是,当用户无(注销)时,我得到一个空响应。为什么?如何纠正它?

据我从实现和方法中了解,您需要传递
Profile
的实例来填充数据。我想这样做:

class ProfileAPI(generics.RetrieveAPIView):
    serializer_class = ProfileSerializer

    def get_object(self):
        try:
            return Profile.objects.get(user=self.request.user)
        except:
            return Profile()  # empty object instance


class ProfileSerializer(serializers.ModelSerializer):

    html = serializers.SerializerMethodField()

    def get_html(self, obj):
        if obj and obj.pk:
            return CUSTOM_HTML
        return NOT_LOGGED_IN_HTML       

    class Meta(object):
        model = Profile
        fields = ('html',)
class ProfileAPI(泛型。检索API视图):
serializer\u class=探查器序列化器
def get_对象(自身):
尝试:
返回Profile.objects.get(user=self.request.user)
除:
返回配置文件()#空对象实例
类探查器序列化器(serializers.ModelSerializer):
html=序列化程序。SerializerMethodField()
def get_html(自我,obj):
如果obj和obj.pk:
返回自定义HTML
返回未登录的HTML
类元(对象):
模型=外形
字段=('html',)