我正在制作我的第一个API,它几乎就是我想要的。我试图让用户既可以单独访问,也可以通过他们的组访问,但我希望将API设置为直接显示用户拥有的所有访问权限,而不是将其嵌入到组中。
基本上,我希望获取group_affiliation结果并将它们合并到其余结果中,因为它们具有相同的结构,并且在该格式中更易于使用。
目前,我的输出如下所示:
[
{
"username": "admin",
"access": [
{
"name": "foo"
},
{
"name": "bar"
}
],
"group_affiliation": [
{
"access": [
{
"name": "eggs"
},
{
"name": "foo"
}
],
},
]
},
]但我希望它看起来更像这样,将group_affiliation结果合并到其他结果中:
[
{
"username": "admin",
"access": [
{
"name": "foo"
},
{
"name": "bar"
},
{
"name": "eggs"
}
],
}
]这是我的models.py:
class Access(models.Model):
name = models.CharField(max_length=100)
site_user_access = models.ManyToManyField(User, blank=True)
site_group_access = models.ManyToManyField(Group, blank=True)下面是我的serializers.py:
class AccessSerializer(serializers.ModelSerializer):
class Meta:
model = TopAccess
fields = ('name', )
class GroupSerializer(serializers.ModelSerializer):
access = AccessSerializer(
source='access_set',
many=True
)
class Meta:
model = Group
fields = (
'access',
)
class UserAccessSerializer(serializers.ModelSerializer):
access = AccessSerializer(
source='access_set',
many=True
)
group_affiliation = GroupSerializer(
source='groups',
many=True,
)
class Meta:
model = User
fields = (
'username',
'access',
'group_affiliation',
)任何帮助都将不胜感激。
发布于 2017-07-10 21:12:08
感谢@zaphod100.10和Betelgeuse V的人们为我指明了正确的方向,也感谢这个post给我提供了语法。
以下是我的解决方案:
class AccessSerializer(serializers.ModelSerializer):
class Meta:
model = Access
fields = ('name', )
class UserAccessSerializer(serializers.ModelSerializer):
access = SerializerMethodField('access_set')
class Meta:
model = User
fields = (
'username',
'access',
)
def access_set(self, user):
queryset = Access.objects.filter(site_user_access=user)
queryset = queryset | Access.objects.filter(site_group_access__user=user)
queryset = queryset.distinct()
serializer = AccessSerializer(instance=queryset, many=True)
return serializer.data,它们给出了上面列出的预期结果。
https://stackoverflow.com/questions/44972852
复制相似问题