Python中Django REST framework的使用问题请教

我又来问 dalao 们问题了
这几天一直在仔细看 restframework 的文档,手上也有一个项目正在写,但以前是 func_view 的,正在慢慢改成 class_view 的

现在有个问题是关于 Serializer 的,比如说都要返回 User 信息
游客、本人以及好友可能看到的信息是不一样的
我现在的做法是通过定义一个基础 UserSerializer ,再继承它对 fields 作限制,
但是这样另一个问题是 嵌套问题, 比如 User 关联了 Profile , Profile 也要根据身份区别返回
,这样就要分别定制一堆 Serializer 。

另外我知道一个 HyperLinkModelSerializer ,但目前我需要返回嵌套形式的属性

求大佬们指导啊
Python中Django REST framework的使用问题请教


8 回复

在 View 里定义 queryset 的时候就做区分。
if request.user.is_authenticated:
models.Post.objects.all()
else:
models.Post.objects.filter(type=‘public’).all()


我无法理解你的问题

关联的,不太好处理,可以选择在 serializer 的__init__里修改这个关联 fields 的 queryset 值。

你这个需要运行时确定返回数据, request 对象要参与数据生成的,直接重写 get_queryset 吧

下面我用的一种方式, DRF 应该有类似的自定义机制

<br>class UserSerializer(object):<br><br> fields = ['username', 'profile', 'is_member']<br><br> def serialize_field(self, field):<br> func = getattr('serialize_field_%s' % field, None)<br> if func:<br> return self.func()<br><br> return super(UserSerializer, self).serialize_field()<br><br> def serialize_field_profile(self):<br> return {<br> 'private': 'private property',<br> 'public': 'public property',<br> }<br><br><br>class GuestUserSerializer(UserSerializer):<br> fields = ['username', 'profile']<br><br> def serialize_field_profile(self):<br> return {'public': 'public property'}<br>


对的,我目前就用的这种方法,前两天太忙了都没上 V 站, restframework 里讲 Serializer 部分有一个就是 DynamicSerializer ,可以在生成 Serializer 时传入 fields 和 exclude 等字段

好的,我再看看, 前两天有些忙都没时间回复

这个我还没看过,一会看看~

回到顶部