【问题标题】:cannot import name DurationField无法导入名称 DurationField
【发布时间】:2016-08-13 19:34:29
【问题描述】:

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

错误信息 enter image description here

Views.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

【问题讨论】:

  • 你在哪里使用DurationField - 在代码中找不到。
  • 它指向一个django rest框架自带的文件(serializers.py,line 18)。我已经添加了截图,看一下。

标签: python django django-rest-framework


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-11
    • 2020-02-05
    • 2011-07-11
    • 2018-06-11
    • 2014-11-20
    • 2014-03-04
    • 2017-01-11
    • 2013-03-13
    相关资源
    最近更新 更多