Как отправить полезную нагрузку в другое приложение для конкретной модели в django rest framework - PullRequest
0 голосов
/ 15 мая 2018

Я создаю RESTful API с django 1.11 + djangorestframework==3.8.2 + python3. У меня есть приложения, одно из которых - HR, а другое - приложение Payroll. В hr.models я определил класс Employee, а также реализовал представление на основе классов для создания экземпляра Employee. У меня небольшая проблема, однако я хотел бы сделать возможным, чтобы при создании экземпляра сотрудника приложение для расчета заработной платы обновлялось с теми же сведениями о сотруднике. Как мне это реализовать: Итак, вот как я реализовал в hr.views:

class AddEmployeeAPIView(APIView):

    def post(self, request, format=None):
        try:
            company = Company.objects.get(id=request.data['company'])

            department = Department.objects.get(id=request.data['department'])
            job_group = JobGroup.objects.get(id=request.data['job_group'])
            contract_type = Contract.objects.get(
                id=request.data['contract_type'])
            skill = Skill.objects.get(id=request.data['skill'])
            unit = Unit.objects.get(id=request.data['unit'])

            try:
                c_user = User.objects.get(id=request.data['user'])
            except:
                new_user = request.data['new_user']
                c_user = User.objects.create(first_name=new_user['first_name'],
                                             last_name=new_user['last_name'],
                                             username=new_user['username'],
                                             email=new_user['email'],
                                             password=new_user['password'])
            try:
                job_title = Job.objects.get(id=request.data['job_title'])
            except:
                new_job = request.data['new_job']
            if new_job:
                job_title = Job.objects.create(
                    name=new_job['name'],
                    job_code=new_job['job_code']
                )

            employee = Employee.objects.create(
                user=c_user,
                company=company,
                department=department,
                job_group=job_group,
                contract_type=contract_type,
                skill=skill,
                unit=unit,
                job_title=job_title,
                hr_number=request.data['hr_number'],
                nhif_no=request.data['nhif_no'],
                nssf_no=request.data['nssf_no'],
                identification_number=request.data['identification_number'],
                induction_date=request.data['induction_date'],
                orientation_date=request.data['orientation_date'],
                tax_id_number=request.data['tax_id_number'],
                joining_date=request.data['joining_date'],
                is_manager=request.data['is_manager'],
                active=request.data['active']
            )
            employee.save()

            # Update Payroll with  Employee Details
            #
            ####
            url = 'http://0.0.0.0:9000/payroll/employee_create/'

            try:
            payload = {
                'subject_type': 'EMPLOYEE-DETAILS',
                'user': employee.user.username, ,
                'company': employee.department,
                'job_group': employee.job_group,
                'contract_type': employee.contract_type,
                'skill': employee.skill,
                'unit': employee.unit,
                'job_title': employee.job_title,
                'hr_number': request.data['hr_number'],
                'nhif_no': request.data['nhif_no'],
                'nssf_no': request.data['nssf_no'],
                'identification_number': request.data['identification_number'],
                'induction_date': request.data['induction_date'],
                'orientation_date': request.data['orientation_date'],
                'tax_id_number': request.data['tax_id_number'],
                'joining_date': request.data['joining_date'],
                'is_manager': request.data['is_manager'],
                'active': request.data['active']
            }

            res = requests.post(url, data=payload)

        except Exception as e:
            return Response(data={"Data": "Add Employee  Failed", "Error": str(res.status_code)}, status=status.HTTP_201_CREATED)
        if res.status_code == 201:
            return Response(data={"Data": "Employee Added Successfull"}, status=status.HTTP_201_CREATED)
        else:
            return Response(data={"Answer": "Employee to Payroll Failed", "Error": str(res.status_code)}, status=status.HTTP_201_CREATED)

1 Ответ

0 голосов
/ 16 мая 2018

Я наконец-то понял: (Это обновление кода выше)

 ##################### HTTP COMMUNICATION WITH PAYROLL ############
            # Update Payroll with  Employee Relevant Data.
            #
            ###################################################################

            try:
                url = PAYROLL_IP + "/payroll/employees/"
                payload = {
                    'subject_type': 'EMPLOYEE-DETAILS',
                    'first_name': employee.user.first_name,
                    'last_name': employee.user.last_name,
                    'department': employee.department.name,
                    'company': employee.company.name,
                    'job_group': employee.job_group.name,
                    'hr_number': request.data['hr_number'],
                    'nhif_no': request.data['nhif_no'],
                    'nssf_no': request.data['nssf_no'],
                    'tax_id_number': request.data['tax_id_number'],
                    'joining_date': request.data['joining_date'],

                }

                # res = requests.post(url, data=payload)

                r = requests.post(
                    url,
                    headers={'Content-Type': 'application/json'},
                    data=json.dumps(payload, cls=DjangoJSONEncoder))

            except Exception as e:
                raise e
                return Response(data={"Data": "Add Employee  Failed", "Error": str(r.status_code)}, status=status.HTTP_201_CREATED)
            if r.status_code == 201:
                return Response(data={"Data": "Employee Added Successfull"}, status=status.HTTP_201_CREATED)
            else:
                return Response(data={"Answer": "Employee to Payroll Failed",
                                      "Error": str(r.status_code)}, status=status.HTTP_201_CREATED)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...