Skip to main content
 首页 » 编程设计

python之无法导入名称 DurationField

2025年05月04日29落叶无声

我正在尝试运行一个使用 django rest 框架的应用程序。但是我收到导入错误“无法导入名称 DurationField”。我该如何解决此错误?

错误信息 enter image description here

View .py

from django.shortcuts import render 
from django.contrib.auth.models import User 
from django.http import Http404 
 
from restapp.serializers import UserSerializer 
from rest_framework.views import APIView 
from rest_framework.response import Response 
from rest_framework import status 
 
 
class UserList(APIView): 
 
#List all user,create new one 
def get(self,request,format=None): 
    users = User.objects.all() 
    serializer = UserSerializer(users,many=True) 
    return Response(serializer.data) 
 
def post(self,request,format=None): 
    serializer= UserSerializer(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) 
 
def delete(self,request,pk, format=None): 
    user = self.get_object(pk) 
    user.delete() 
    return Response(status=status.HTTP_204_NO_CONTENT) 
 
class UserDetail(APIView): 
 
#Retrive update,or delete a user instance 
 
def get_object(self,pk): 
    try: 
        return User.objects.get(pk=pk) 
    except user.DoesNotExist: 
        raise 404 
 
def get(self,request,pk,format=None): 
    user = self.get_object(pk) 
    user = UserSerializer(user) 
    return Response(user.data) 
 
def put(self,request,pk,format=None): 
    user = self.get_object(pk) 
    serializer=UserSerializer(user,data = request.DATA) 
    if serializer.is_valid(): 
        serializer.save() 
        return Response(serializer.data) 
    return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST) 
 
 
def delete(self,request,pk,format=None): 
    user = self.get_object(pk) 
    user.delete() 
    return Response(status=status.HTTP_204_NO_CONTENT) 

序列化器.py

from django.contrib.auth.models import User 
from rest_framework import serializers 
 
class UserSerializer(serializers.ModelSerializer): 
  class Meta: 
     model = User 
     fields = ('id','username','firstname','last_name','email') 

它指向此文件 serializers.py,第 18 行作为错误源。

enter image description here

请您参考如下方法:

从屏幕截图中,我可以看到您使用的是 Django 1.7。

Drf 导入的 DurationField 是在 Django 1.8 中引入的。

所以你必须升级你的 Django 才能让这个版本的 DRF 工作。