私のアプリには、次のモデルがあります。
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
ネストされたリソースにフィルターを適用する方法はありますか?
ところで、これには a を使用したくありません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
解決策をどうもありがとう!