【问题标题】:django Many to Many with three table relationships togetherdjango 多对多与三个表关系在一起
【发布时间】:2020-04-15 21:53:42
【问题描述】:

我想创建一个具有 3 个模型和多对多关系的序列化器:

# 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 serialization


    【解决方案1】:

    我猜你应该使用这个代码,也许有不同的 field_names

    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: Got AttributeError when trying to get a value for field permissions on serializer FeatureSerializer.序列化程序字段可能命名不正确,并且与 Feature 实例上的任何属性或键都不匹配。原始异常文本是:“功能”对象没有属性“权限”。
    • 我想您需要将“权限”字段从角色模型移动到特征模型。此外,模型的结构会更好)))
    猜你喜欢
    • 2018-01-11
    • 2011-08-10
    • 1970-01-01
    • 2011-06-22
    • 2011-06-02
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    • 2017-07-18
    相关资源
    最近更新 更多