在Django Rest Framework中使用PUT更新外键

瓦姆西

我基本上是Rest框架的新成员,而对Django则相对较新。我正在使用Employee Rest API,并使用以下Django模型创建了Employee-Department表。我在员工部门ID和部门ID之间分配了外键关系。现在,我想使用PUT操作更新Employee表。但是,当我更新Employee.dept_id时,它不会使用新值进行更新。我了解,由于其为只读字段,因此无法对其进行更新。如何将其更改为写入字段?这样我就可以更新员工表中的部门ID。

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)
斯威克特·贾恩(Swakeert Jain)

您需要覆盖Employee Serializer中的create()和update()视图。请参考此链接以获取完整的文档。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Django Rest Framework中使用PUT更新外键

来自分类Dev

Django Rest Framework POST 和 PUT 外键 ModelSerializer

来自分类Dev

Django rest PUT 请求序列化程序无法使用外键更新模型

来自分类Dev

Django-Rest-Framework通过ID更新外键

来自分类Dev

Django-rest-framework从id更新外键

来自分类Dev

从 Django Rest Framework 渲染外键元素

来自分类Dev

在Django Rest Framework中创建或更新(使用PUT)

来自分类Dev

Django REST Framework批处理PUT(更新)

来自分类Dev

如何在Django Rest Framework中使用SerializerMethodField更新

来自分类Dev

Django REST外键问题

来自分类Dev

在Django Rest Framework中发布外键关系

来自分类Dev

在Django Rest Framework中发布外键ID

来自分类Dev

Django Rest Framework:默认外键为请求中的值

来自分类Dev

在Serializer Django:Rest Framework中获取外键关系的数据

来自分类Dev

使用viewsets.ModelViewSet视图更新Django rest框架模型中的外键

来自分类Dev

如何使用Django Rest Framework更新OneToOneField

来自分类常见问题

Django Rest Framework部分更新

来自分类Dev

Django REST框架外键和过滤

来自分类Dev

Django-REST外键对象权限

来自分类Dev

Django rest框架无法保存外键

来自分类Dev

如何使用Django-Rest-Framework中的泛型进行PUT(部分更新)?

来自分类Dev

Django Rest Framework and JSONField

来自分类Dev

Django Rest Framework API

来自分类Dev

Django Rest Framework的ModuleNotFoundError

来自分类Dev

django-rest-framework 中 django 外键字段的完整性错误

来自分类Dev

使用Django REST Framework序列化外键数组

来自分类Dev

在Django Rest Framework中测试PUT请求

来自分类Dev

Django REST Framework:如何向使用穿透表的M2M序列化器添加外键?

来自分类Dev

在Django Rest Framework中使用无限滚动吗?

Related 相关文章

  1. 1

    在Django Rest Framework中使用PUT更新外键

  2. 2

    Django Rest Framework POST 和 PUT 外键 ModelSerializer

  3. 3

    Django rest PUT 请求序列化程序无法使用外键更新模型

  4. 4

    Django-Rest-Framework通过ID更新外键

  5. 5

    Django-rest-framework从id更新外键

  6. 6

    从 Django Rest Framework 渲染外键元素

  7. 7

    在Django Rest Framework中创建或更新(使用PUT)

  8. 8

    Django REST Framework批处理PUT(更新)

  9. 9

    如何在Django Rest Framework中使用SerializerMethodField更新

  10. 10

    Django REST外键问题

  11. 11

    在Django Rest Framework中发布外键关系

  12. 12

    在Django Rest Framework中发布外键ID

  13. 13

    Django Rest Framework:默认外键为请求中的值

  14. 14

    在Serializer Django:Rest Framework中获取外键关系的数据

  15. 15

    使用viewsets.ModelViewSet视图更新Django rest框架模型中的外键

  16. 16

    如何使用Django Rest Framework更新OneToOneField

  17. 17

    Django Rest Framework部分更新

  18. 18

    Django REST框架外键和过滤

  19. 19

    Django-REST外键对象权限

  20. 20

    Django rest框架无法保存外键

  21. 21

    如何使用Django-Rest-Framework中的泛型进行PUT(部分更新)?

  22. 22

    Django Rest Framework and JSONField

  23. 23

    Django Rest Framework API

  24. 24

    Django Rest Framework的ModuleNotFoundError

  25. 25

    django-rest-framework 中 django 外键字段的完整性错误

  26. 26

    使用Django REST Framework序列化外键数组

  27. 27

    在Django Rest Framework中测试PUT请求

  28. 28

    Django REST Framework:如何向使用穿透表的M2M序列化器添加外键?

  29. 29

    在Django Rest Framework中使用无限滚动吗?

热门标签

归档