Я создаю 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)