我尝试实现一个模型,其中将两个组链接在一起。我做了这个模型:
GroupLinker.py
from django.contrib.auth.models import Group
from django.db import models
class GroupLinker(models.Model):
EMSGroup = models.ForeignKey(Group, on_delete=models.CASCADE, related_name="EMSGroup", default=None)
LDAPGroup = models.ForeignKey(Group, on_delete=models.CASCADE, related_name="LDAPGroup", default=None)
但是在我的 / POST 请求中,我只想指定其名称:
{
"links": [
{
"EMSGroup": "UserAdministrator",
"LDAPGroup": "master group"
}
]
}
我的主要问题是弄清楚如何在Django序列化过程中实现它。我试图像这样实现GroupLinkerSerializer:
GroupLinkerSerializer.py
from api.Models.GroupLinker import GroupLinker
from django.contrib.auth.models import Group
from rest_framework import serializers
class GroupSerializer(serializers.ModelSerializer):
class Meta:
model = Group
fields = ('name',)
class GroupLinkerSerializer(serializers.ModelSerializer):
EMSGroup = GroupSerializer()
LDAPGroup = GroupSerializer()
class Meta:
model = GroupLinker
fields = ("EMSGroup", "LDAPGroup")
当然,我知道它不能单独检索所请求的组(仅使用名称),所以我认为在我的ClassView中可以做到这一点,并将所需的参数传递给 GroupLinkerSerializer (“分组”格式的“分组”),但事实上,我在考虑了它之后在GroupSerializer中设置了每个分组的名称……
这是我的视图(据我所知,它的编码不正确):
GroupHandler.py
class EMSGroupHandler(APIView):
authentication_classes = (SessionAuthentication, BasicAuthentication,)
permission_classes = (IsAuthenticated, )
def post(self, aRequest):
# Post method implemented to make links between EMSGroups and LDAPGroups
wDataLink = aRequest.data
for link in wDataLink["links"]:
# Group to link retrieval
wEmsGroup = GroupLinkerSerializer().RetrieveGroup(aGroupName=link["EMSGroup"])
wLDAPGroup = GroupLinkerSerializer().RetrieveGroup(aGroupName=link["LDAPGroup"])
# Should I format Group to dict here???
params = {
"EMSGroup": <DICT GROUP 1>,
"LDAPGroup": <DICT GROUP 2>
}
wGroupLinkerSerializer = GroupLinkerSerializer(data=params)
# wGroupLinkerSerializer = GroupLinkerSerializer(wEmsGroup, wLDAPGroup)
if wGroupLinkerSerializer.is_valid():
print(wGroupLinkerSerializer.validated_data)
wGroupLinkerSerializer.save()
wResponse = Response(data=wDataLink, status=status.HTTP_200_OK)
return wResponse
但是,我认为,因为我只在请求中指定了我的 Group “ 名称”,所以我在 GroupLinkerSerializer 中定义验证方法,以便手动验证所定义的组是否存在,如果存在,请授权 GroupLinker 创建并保存在数据库中。
我知道这可能有些棘手,但是我的过程的目标是能够在ORM表中的两个组之间创建链接(使用 GroupLinker 类)
请我真的需要帮助,我被困了一段时间。
亲切的问候。
本杰明。