2016-08-30 2 views
0

Я в основном новый участник в платформе Rest и относительно новый для Django. Я работаю над API Employee Rest, и я создал таблицы Employee - Department, используя ниже модели Django. Я назначил отношения с внешним ключом между идентификатором сотрудника и идентификатором отдела. Теперь я хочу обновить таблицу Employee, используя операцию PUT. Но когда я обновляю Employee.dept_id, он не обновляется с новым значением. Я понимаю, что, поскольку его поле только для чтения, я не могу его обновить. Как изменить его на поле ввода? так что я могу обновить идентификатор отдела в таблице employee.Обновление внешнего ключа с использованием PUT в Django Rest Framework

models.py

class Department(models.Model): 
    dept_id = models.IntegerField(primary_key=True) 
    dept_name = models.CharField(max_length=30) 

    def __str__(self): 
     return self.dept_id 

    class Meta: 
     ordering = ('dept_id',) 


class Employee(models.Model): 
    first_name = models.CharField(max_length=30,blank=True) 
    last_name = models.CharField(max_length=30,null=True,blank=True) 
    emp_id = models.AutoField(primary_key=True) 
    hire_date = models.DateField(default=datetime.date.today) 
    email_id = models.EmailField(blank=True) 
    dept = models.ForeignKey(Department, null=True,blank=True,related_name="dept") 

    def __str__(self): 
     return '%s %s' % (self.first_name, self.last_name) 

    class Meta: 
     ordering = ('emp_id',) 

Мои сериализаторов для вышеприведенные модели являются

serializers.py

class DepartmentSerializer(serializers.HyperlinkedModelSerializer): 

    class Meta: 
     model = Department 
     fields = ('dept_id','dept_name') 


class EmployeeSerializer(serializers.ModelSerializer): 
    dept_id = DepartmentSerializer().get_fields() 

    class Meta: 
     model = Employee 
     fields = ('emp_id','last_name','first_name','hire_date','email_id', 'dept_id') 

views.py

@api_view(['GET','POST']) 
def employee_list(request, format=None): 
    """ 
    List all employees, or create a new employee 
    """ 

    if request.method == 'GET': 
     employees = Employee.objects.all() 
     serializer = EmployeeSerializer(employees,many=True) 
     return Response(serializer.data) 

    elif request.method == 'POST': 
     serializer = EmployeeSerializer(data=request.data) 
     if serializer.is_valid(): 
      serializer.save() 
      return Response(serializer.data, status=status.HTTP_201_CREATED) 
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 


@api_view(['GET','PUT','DELETE']) 
def employee_detail(request, pk, format=None): 
    """ 
    Retrieve, update or delete a employee. 

    """ 
    try: 
     employee = Employee.objects.get(pk=pk) 
    except Employee.DoesNotExist: 
     return Response(status=status.HTTP_404_NOT_FOUND) 

    if request.method=='GET': 
     serializer = EmployeeSerializer(employee) 
     return Response(serializer.data) 

    elif request.method == 'PUT': 
     serializer = EmployeeSerializer(employee,data=request.data) 
     if serializer.is_valid(): 
      serializer.save() 
      return Response(serializer.data) 
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

    elif request.method=='DELETE': 
     employee.delete() 
     return Response(status=status.HTTP_204_NO_CONTENT) 

ответ

0

Вам необходимо перезаписать представления create() и update() в вашем Сериализаторе сотрудников. Пожалуйста, обратитесь к this link за полным документом.

Смежные вопросы