【发布时间】:2013-05-25 04:09:56
【问题描述】:
在我的应用中,我有以下模型:
class Zone(models.Model):
name = models.SlugField()
class ZonePermission(models.Model):
zone = models.ForeignKey('Zone')
user = models.ForeignKey(User)
is_administrator = models.BooleanField()
is_active = models.BooleanField()
我正在使用 Django REST 框架创建一个资源,该资源返回区域详细信息以及一个嵌套资源,该资源显示经过身份验证的用户对该区域的权限。输出应该是这样的:
{
"name": "test",
"current_user_zone_permission": {
"is_administrator": true,
"is_active": true
}
}
我已经创建了这样的序列化程序:
class ZonePermissionSerializer(serializers.ModelSerializer):
class Meta:
model = ZonePermission
fields = ('is_administrator', 'is_active')
class ZoneSerializer(serializers.HyperlinkedModelSerializer):
current_user_zone_permission = ZonePermissionSerializer(source='zonepermission_set')
class Meta:
model = Zone
fields = ('name', 'current_user_zone_permission')
问题在于,当我请求特定区域时,嵌套资源会返回 所有 具有该区域权限的用户的 ZonePermission 记录。有什么方法可以将request.user 上的过滤器应用于嵌套资源?
顺便说一句,我不想为此使用 HyperlinkedIdentityField(以尽量减少 http 请求)。
解决方案
这是我根据以下答案实施的解决方案。我将以下代码添加到我的序列化程序类中:
current_user_zone_permission = serializers.SerializerMethodField('get_user_zone_permission')
def get_user_zone_permission(self, obj):
user = self.context['request'].user
zone_permission = ZonePermission.objects.get(zone=obj, user=user)
serializer = ZonePermissionSerializer(zone_permission)
return serializer.data
非常感谢您的解决方案!
【问题讨论】:
标签: django django-rest-framework