Django DRF-序列化方法字段
我有一个API视图,如下所示:-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
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',)