簡體   English   中英

django 多對多與三個表關系在一起

[英]django Many to Many with three table relationships together

我想創建一個具有 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"
                    }
                ]
            }
        ]
    }
]

但是我無法正確編寫序列化程序?

任何幫助表示贊賞。

我想你應該使用這個代碼,也許有不同的 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', )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM