Я хочу получить список всех сотрудников, которые зарегистрированы в компании вместе с их назначением - PullRequest
0 голосов
/ 26 сентября 2019

Я работаю над моделью и хочу получить информацию о сотрудниках в организации вместе с их назначениями.Я не могу думать ни о чем в данный момент.Я впервые задаю вопрос здесь, поэтому любая помощь будет много значить, и если я не предоставил точные детали, пожалуйста, сообщите мне.Я думаю, что этого должно быть достаточно для ответа.

Вот мои модели организации и userorgdetail:

class Organization(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=256)
    employees = models.ManyToManyField(InSocialUser, related_name='organizations', blank=True, 
    through="UserOrgDetail")
    description=models.TextField(blank=True)


class UserOrgDetail(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    user = models.ForeignKey(InSocialUser, related_name='org_details', on_delete=models.CASCADE)
    org = models.ForeignKey(Organization, related_name='employee_details', on_delete=models.CASCADE)
    designation = models.CharField(max_length=256)
    REQUIRED_FIELDS = ['user','org']

Вот мой файл сериализаторов:

class OrgSerializer(serializers.ModelSerializer):
    class Meta:
        model = Organization
        fields = ('id','name','employees')

class UserOrgDetailSerializer(serializers.ModelSerializer):

    class Meta:
        model = UserOrgDetail
        fields = '__all__'

class UserOrgDetailReadSerializer(UserOrgDetailSerializer):
    user = serializers.PrimaryKeyRelatedField(read_only=True)
    org = OrgSerializer(read_only=True)

views.py

class OrganizationAPIView(
mixins.CreateModelMixin, 
generics.ListAPIView): 
permission_classes          = [permissions.IsAuthenticatedOrReadOnly]
serializer_class            = OrgSerializer
filter_backends             = [filters.OrderingFilter,filters.SearchFilter]
search_fields               = ['name']
ordering_fields             = ['name']
ordering                    = ['name']
queryset                    = Organization.objects.all()

    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)

    def perform_create(self, serializer):
        serializer.save()

class UserOrgDetailAPIView(
    mixins.CreateModelMixin, 
    generics.ListAPIView): 
    permission_classes          = [permissions.IsAuthenticated]
    serializer_class            = UserOrgDetailReadSerializer
    filter_backends             = [filters.OrderingFilter,filters.SearchFilter]
    search_fields               = ['designation']
    ordering_fields             = ['name']
    ordering                    = ['name']

    def get_queryset(self, *args, **kwargs):

        id = self.kwargs.get("id",None)
        """
        This view should return a list of all the Organization Details of the logged in user
        """

        queryset = UserOrgDetail.objects.filter(user__id=id)

        return queryset

    def post(self, request, *args, **kwargs):
        id = self.kwargs.get("id",None)
        #user = get_object_or_404(User, id=id)
        user = User.objects.get(id=id)
        orgId = request.data.get('org_id')
        org = Organization.objects.get(pk=orgId)

        designation = request.data.get('designation')



        org_detail = UserOrgDetail.objects.create(user=user,org=org,designation=designation)
        user.save()

    return Response({"status": "Success","result":UserOrgDetailReadSerializer(org_detail).data})

class UserOrgDetailDetailAPIView(
    mixins.UpdateModelMixin,
    mixins.DestroyModelMixin, 
    generics.RetrieveAPIView):
    permission_classes          = [permissions.IsAuthenticated]
    serializer_class            = UserOrgDetailReadSerializer
    queryset                    = UserOrgDetail.objects.all()
    lookup_field                = 'id'

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)

    def patch(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)

    def delete(self, request, *args, **kwargs):
        return self.destroy(request, *args, **kwargs)

    def get_serializer_class(self):
        if self.request.method == 'GET':
            return UserOrgDetailReadSerializer
        else:
            return self.serializer_class

Я хочу, чтобы, когда я запускаю запрос get для userorgdetail, я получал сотрудников, работающих в компании, вместе с их назначением.Любая помощь будет очень полезна, спасибо

...