django多对多,三个表关系在一起

问题描述 投票:0回答:1

我想用3个模型和多对多关系创建一个Seralizer:

# models.py

class Permission(models.Model):
    permission_name = models.CharField(max_length=20)  
class Feature(models.Model):
    feature_name = models.CharField(max_length=40)
class Role(models.Model):
    name = models.CharField(max_length=40)
    permissions = models.ManyToManyField(Permission, through='RolePermission')
    features = models.ManyToManyField(Feature, through='RolePermission')
class RolePermission(models.Model):
    role = models.ForeignKey(Role, on_delete=models.CASCADE)
    permission = models.ForeignKey(Permission, on_delete=models.CASCADE)
    feature = models.ForeignKey(Feature, on_delete=models.CASCADE)

样本数据

PERMISSION:
1 - add
2 - edit
3 - remove
4 - view
FEATURE:
1 - user
2 - device
ROLE:
1 - ROLE1
2 - ROLE2

我想从视图响应的数据

[
    {
        "id": 1,
        "name": "ROLE1",
        "features": [
            {
                "id": 1,
                "name": "user",
                "permissions": [
                    {
                        "id": 1,
                        "name": "add"
                    },
                    {
                        "id": 2,
                        "name": "edit"
                    },
                    {
                        "id": 3,
                        "name": "remove"
                    },
                    {
                        "id": 4,
                        "name": "view"
                    }
                ]
            },
            {
                "id": 2,
                "name": "device",
                "permissions": [
                    {
                        "id": 4,
                        "name": "view"
                    }
                ]
            }
        ]
    },
    {
        "id": 2,
        "name": "ROLE2",
        "features": [
            {
                "id": 1,
                "name": "user",
                "permissions": [
                    {
                        "id": 4,
                        "name": "view"
                    }
                ]
            },
            {
                "id": 2,
                "name": "device",
                "permissions": [
                    {
                        "id": 4,
                        "name": "view"
                    }
                ]
            }
        ]
    }
]

但是我无法正确编写串行器?

感谢您的任何帮助。

python django django-rest-framework many-to-many serializer
1个回答
1
投票

我想您应该使用此代码,也许有不同的field_names

© www.soinside.com 2019 - 2024. All rights reserved.