Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django多对多,同时具有三个表关系_Python_Django_Django Rest Framework_Many To Many_Serialization - Fatal编程技术网

Python django多对多,同时具有三个表关系

Python django多对多,同时具有三个表关系,python,django,django-rest-framework,many-to-many,serialization,Python,Django,Django Rest Framework,Many To Many,Serialization,我想创建一个具有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 = mo

我想创建一个具有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"
                    }
                ]
            }
        ]
    }
]
我想从视图中响应的数据

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"
                    }
                ]
            }
        ]
    }
]
但是我不能正确地编写序列化程序


非常感谢您的帮助。

我想您应该使用此代码,可能有不同的字段名

class PermisionSerializer(serializers.ModelSerializer):

    class Meta:
        model = Permission
        fields = ('name', )

class FeatureSerializer(serializers.ModelSerializer):
    permissions = PermisionSerializer(many=True)

    class Meta:
        model = Feature
        fields = ('name', 'permissions', )


class RoleSerializer(serializers.ModelSerializer):
    features = FeatureSerializer(many=True)

    class Meta:
        model = Role
        fields = ('name', 'features', )

我想你应该使用这个代码,也许有不同的字段名

class PermisionSerializer(serializers.ModelSerializer):

    class Meta:
        model = Permission
        fields = ('name', )

class FeatureSerializer(serializers.ModelSerializer):
    permissions = PermisionSerializer(many=True)

    class Meta:
        model = Feature
        fields = ('name', 'permissions', )


class RoleSerializer(serializers.ModelSerializer):
    features = FeatureSerializer(many=True)

    class Meta:
        model = Role
        fields = ('name', 'features', )

我在使用此序列化程序时遇到了一些问题:AttributeError:get AttributeError在尝试获取序列化程序
功能序列化程序
上的字段
权限的值时遇到了问题。序列化程序字段的名称可能不正确,并且与
功能
实例上的任何属性或键都不匹配。原始异常文本是:“功能”对象没有“权限”属性。我想您需要将“权限”字段从角色模型移动到功能模型。另外,对于模型来说,它的结构会更好。)我在使用这个序列化程序时遇到一些问题:AttributeError:get AttributeError试图获取序列化程序
功能序列化程序
上的字段
权限
的值。序列化程序字段的名称可能不正确,并且与
功能
实例上的任何属性或键都不匹配。原始异常文本是:“功能”对象没有“权限”属性。我想您需要将“权限”字段从角色模型移动到功能模型。而且,对于模型来说,它的结构会更好)