首页 > 解决方案 > 无法在 Django 休息更新视图中获取实例值

问题描述

我正在使用 Django 3.0 djangorestframework==3.11.0。我创建了一个任务更新视图并将 pk 传递给 url。问题是 - 虽然我已将序列化程序实例设置为我要更新的模型对象。序列化程序实例未显示。

模型.py

from django.db import models

# Create your models here.
class Task(models.Model):
    title = models.CharField(max_length=200)
    completed = models.BooleanField(default=False, blank=True, null=True)

    def __str__(self):
        return self.title

序列化程序.py

from rest_framework import serializers
from .models import Task

class TaskSerializer(serializers.ModelSerializer):
    class Meta:
        model = Task
        fields = '__all__'

网址.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.apiOverview, name='api-overview'),
    path('task-list/', views.taskList, name='task-list'),
    path('task-detail/<str:pk>/', views.taskDetail, name='task-detail'),
    path('task-create/', views.taskCreate, name='task-create'),
   path('task-update/<str:pk>/', views.taskUpdate, name='task-update'),
]

视图.py

from django.shortcuts import render

from rest_framework.decorators import api_view
from rest_framework.response import Response

from .models import Task
from .serializers import TaskSerializer

@api_view(['POST'])
def taskUpdate(request, pk):
    task = Task.objects.get(id=pk)
    serializer = TaskSerializer(instance=task, data=request.data)

    if serializer.is_valid():
        serializer.save()

    return Response(serializer.data)

url http://localhost:8000/api/task-update/4/ 上的预期行为

url http://localhost:8000/api/task-update/4/ 的预期视图

http://localhost:8000/api/task-update/4/ 上的实际行为

http://localhost:8000/api/task-update/4/ 上的实际行为

如您所见,内容字段为空,但我希望已关联的 json 以 pk = 4 显示在那里。

标签: pythondjangodjango-rest-framework

解决方案


推荐阅读