1
phithon 2017-02-27 21:10:13 +08:00 1
在 View 里定义 queryset 的时候就做区分。
if request.user.is_authenticated: models.Post.objects.all() else: models.Post.objects.filter(type='public').all() |
2
phithon 2017-02-27 21:14:01 +08:00
关联的,不太好处理,可以选择在 serializer 的__init__里修改这个关联 fields 的 queryset 值。
|
3
newlife 2017-02-27 23:54:50 +08:00 1
你这个需要运行时确定返回数据, request 对象要参与数据生成的,直接重写 get_queryset 吧
|
4
siteshen 2017-02-28 12:41:56 +08:00 1
下面我用的一种方式, DRF 应该有类似的自定义机制
``` class UserSerializer(object): fields = ['username', 'profile', 'is_member'] def serialize_field(self, field): func = getattr('serialize_field_%s' % field, None) if func: return self.func() return super(UserSerializer, self).serialize_field() def serialize_field_profile(self): return { 'private': 'private property', 'public': 'public property', } class GuestUserSerializer(UserSerializer): fields = ['username', 'profile'] def serialize_field_profile(self): return {'public': 'public property'} ``` |
5
guolingbing OP @siteshen
对的,我目前就用的这种方法,前两天太忙了都没上 V 站, restframework 里讲 Serializer 部分有一个就是 DynamicSerializer ,可以在生成 Serializer 时传入 fields 和 exclude 等字段 |
6
guolingbing OP @newlife 好的,我再看看, 前两天有些忙都没时间回复
|
7
guolingbing OP @phithon 这个我还没看过,一会看看~
|