Я пытаюсь реализовать модель, в которой связаны 2 группы.Я сделал эту модель:
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 необходимые параметры (группы в формате Dicted), но факт, что я установил имя каждой группы в 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
Однако я подумал, потому что я указал только мою Группу" имя " в запросе, который я имел, В GroupLinkerSerializer , чтобы определить методы проверки для ручной проверки того, что определенные группы существуют или нет, если существует, разрешите создание и сохранение GroupLinker в базе данных.
Я знаю, что это может быть немногохитро, но цельмоего процесса, чтобы иметь возможность создать связь между двумя группами в таблицах ORM (с классом GroupLinker )
Пожалуйста, мне действительно нужна помощь, я застрял на некоторое время.
С уважением.
Бенджамин.