【发布时间】:2020-12-20 13:03:13
【问题描述】:
我是 django rest 框架和 python 的新手。这是我第一次在这里提问。从现在开始感谢您的帮助..
-------------我的模型
class defined_views(models.Model):
name = models.CharField(max_length=150)
class defined_permissions(models.Model):
name = models.CharField(max_length=150)
class menuler(models.Model):
adi= models.CharField(max_length=150, null=True)
sira= models.PositiveIntegerField(null=True, blank=True)
parentId= models.ForeignKey('self', null=True, on_delete=models.CASCADE)
viewId= models.ForeignKey(defined_views, null=True, on_delete=models.CASCADE)
menu_type= models.CharField(max_length=150, null=True)
class user_menu_permission(models.Model):
userId = models.ForeignKey(User, null=False, on_delete=models.CASCADE)
menuID = models.ForeignKey(menuler, null=False, on_delete=models.CASCADE)
permissionID = models.ForeignKey(defined_permissions, null=True, on_delete=models.CASCADE)
-------序列化程序
class menulerSerializer(serializers.ModelSerializer):
class Meta:
model = menuler
fields = ['id', 'adi', 'sira', 'parentId', 'viewId', 'menu_type']
class user_menu_permissionSerializer(serializers.ModelSerializer):
menu = menulerSerializer()
class Meta:
model = user_menu_permission
fields = ['menuID', 'permissionID', 'menu']
class UserSerializer(serializers.ModelSerializer):
menuler = user_menu_permissionSerializer(
source='user_menu_permission_set', many=True)
class Meta:
model = User
fields = ['id', 'username', 'menuler']
------------------and view
class userView(APIView):
def get(self, request):
queryset = User.objects.all()
serializer = UserSerializer(queryset, many=True)
return Response(serializer.data)
我得到了这个错误
“在序列化程序 user_menu_permissionSerializer 上尝试获取字段 menu 的值时出现 AttributeError。
序列化程序字段可能命名不正确,并且与 user_menu_permission 实例上的任何属性或键都不匹配。
原始异常文本为:“user_menu_permission”对象没有属性“menu”。”
如果我像那样更改 user_menu_permissionSerializer
class user_menu_permissionSerializer(serializers.ModelSerializer):
class Meta:
model = user_menu_permission
fields = ['menuID', 'permissionID']
我得到这样的结果,但我也想将菜单作为树..但不幸的是......
[
{
"id": 1,
"username": "admin",
"menuler": []
},
{
"id": 2,
"username": "taner.kader",
"menuler": [
{
"menuID": 2,
"permissionID": 1
},
{
"menuID": 3,
"permissionID": 1
},
{
"menuID": 5,
"permissionID": 1
}
]
}
]
【问题讨论】:
-
你在哪里调用
data? -
另外一件事是,你是不是忘了在
menu = menulerSerializer()中将参数作为many=True传递? -
我也试过 many=true 但是错误是一样的..
class userView(APIView): def get(self, request): queryset = User.objects.all() serializer = UserSerializer(queryset, many=True) return Response(serializer.data)我用这个视图来获取数据 -
在这里分享你的 github 存储库...这样我们就可以看到你在哪里卡住了。
标签: django-rest-framework nested serialization