Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将另一个应用程序的有效负载发送到django rest框架中的特定模型_Python_Django_Python 3.x_Django Rest Framework - Fatal编程技术网

Python 如何将另一个应用程序的有效负载发送到django rest框架中的特定模型

Python 如何将另一个应用程序的有效负载发送到django rest框架中的特定模型,python,django,python-3.x,django-rest-framework,Python,Django,Python 3.x,Django Rest Framework,我用Django1.11构建了一个RESTful API。我需要一个应用程序,一个是人力资源,另一个是工资单应用程序。在hr.models中,我定义了和Employee类,并实现了基于类的视图来创建Employee实例。不过,我有一个小问题,我希望在创建employee实例时,payroll应用程序可以使用相同的员工详细信息进行更新。我如何实现这一点: 到目前为止,这是我在hr.views中实现的方式: class AddEmployeeAPIView(APIView): def po

我用Django1.11构建了一个RESTful API。我需要一个应用程序,一个是人力资源,另一个是工资单应用程序。在
hr.models
中,我定义了和Employee类,并实现了基于类的视图来创建Employee实例。不过,我有一个小问题,我希望在创建employee实例时,payroll应用程序可以使用相同的员工详细信息进行更新。我如何实现这一点: 到目前为止,这是我在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)
我终于明白了:(这是上面代码的更新)


不确定这是否是您真正想要的,但创建员工实例时创建相应工资单实例的更简单方法是定义post save信号。然后,post save信号将检查是否创建了Employee实例,如果为true,将创建一个PAYLOR实例。让我知道这有帮助
 ##################### 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)