2016-08-30 14 views
0

私は基本的に、Restフレームワークへの新しい参加者であり、比較的新しいDjangoへの参加者です。私はEmployee Rest APIで作業しており、以下のDjangoモデルを使用してEmployee - Departmentテーブルを作成しました。従業員の部門IDと部門IDの間に外部キー関係を割り当てました。今私はPUT操作を使用してEmployeeテーブルを更新したいと思います。しかし、私がEmployee.dept_idを更新すると、新しい値で更新されません。私は読み取り専用のフィールド以来、それを更新することができないと理解しています。どのようにフィールドを書き込むためにそれを変更するには?私は従業員のテーブル内の部門IDを更新することができます。Django RestフレームワークでPUTを使用して外部キーを更新する

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を参照してください。

関連する問題