Python 如何将另一个应用程序的有效负载发送到django rest框架中的特定模型
我用Django1.11构建了一个RESTful API。我需要一个应用程序,一个是人力资源,另一个是工资单应用程序。在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
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)