我在我的models.py中扩展了Group模型,并创建了相应的序列化程序,它工作正常。但是,当我尝试序列化用户序列化程序中的组字段时,我仅获得默认字段。 让我展示部分代码:
models.py
class GroupExtended(Group):
description = models.TextField(blank=True)
digitaltwin_permissions = models.ManyToManyField(
to = DigitaltwinPermission,
blank = True,
default = None,
related_name = "gemelo"
)
panel_permissions = models.ManyToManyField(
to = PanelPermission,
blank = True,
default = None,
related_name = "panel"
)
def __str__(self):
return str(self.name)
class Meta:
verbose_name_plural = "4. Grupos"
serializer.py
class GroupExtendedSerializer(serializers.ModelSerializer):
digitaltwin_permissions = DTPSerializer(read_only=True, many=True)
panel_permissions = PPSerializer(read_only=True, many=True)
class Meta:
model = GroupExtended
fields = ['id','name','description','digitaltwin_permissions','panel_permissions','permissions']
class UserSerializer(serializers.ModelSerializer):
groups = GroupExtendedSerializer(read_only=True, many=True)
class Meta:
model = User
fields = '__all__'
我使用用户API获得的是以下JSON:
{
"id":1,
"groups":[
{"id":2,
"name":"Admin",
"permissions":[]}
],
etc
}
相反,我想获得:
{
"id":1,
"groups":[
{"id":2,
"name":"Admin",
"permissions":[],
"description": "whatever",
"digitaltwin_permissions":[*serialized fields*],
"panel_permissions": [*serialized fields*]
}
],
etc
}
我在做什么错?甚至有可能吗?
谢谢!
答案 0 :(得分:0)
我没有覆盖 User 类中的 groups 字段。然后,由于要编写带有ID(group_ids)的组,因此不得不更改用户序列化程序。最后,代码是:
models.py
class GroupExtended(Group):
description = models.TextField(blank=True)
digitaltwin_permissions = models.ManyToManyField(
to = DigitaltwinPermission,
blank = True,
default = None,
related_name = "gemelo"
)
panel_permissions = models.ManyToManyField(
to = PanelPermission,
blank = True,
default = None,
related_name = "panel"
)
class User(AbstractUser):
avatar = models.ForeignKey(
Avatar,
on_delete = models.CASCADE,
blank = True,
null = True
)
groups = models.ManyToManyField(
to = GroupExtended,
blank = True
)
和
serializers.py
class GroupExtendedSerializer(serializers.ModelSerializer):
digitaltwin_permissions = DTPSerializer(read_only=True, many=True)
digitaltwin_permissions_ids = serializers.PrimaryKeyRelatedField(
many=True,
read_only=False,
queryset = DigitaltwinPermission.objects.all(),
source = 'digitaltwin_permissions'
)
panel_permissions = PPSerializer(read_only=True, many=True)
panel_permissions_ids = serializers.PrimaryKeyRelatedField(
many=True,
read_only=False,
queryset = PanelPermission.objects.all(),
source = 'panel_permissions'
)
class Meta:
model = GroupExtended
fields = '__all__'
depth = 8
class UserSerializer(serializers.ModelSerializer):
avatar = AvatarSerializer(read_only=True)
avatar_id = serializers.IntegerField()
groups = GroupExtendedSerializer(read_only=True, many=True)
groups_ids = serializers.PrimaryKeyRelatedField(
many=True,
read_only=False,
queryset = GroupExtended.objects.all(),
source = 'groups'
)
class Meta:
model = User
fields = '__all__'