添加可以通过 PUT 请求更新的自定义 DateTimeField (DjangoRestFramework)

Adding a custom DateTimeField that can be updated through a PUT request (DjangoRestFramework)

我是 django 的新手,我按照本教程创建了一个 django 应用程序:http://www.django-rest-framework.org/tutorial/quickstart/

本教程提供了一个包含各种字段的预制用户 class。我正在尝试添加一个可以通过 android 中的 PUT 请求频繁更新的自定义 DateTimeField。我如何将此自定义字段 "timestamp" 添加到此 class.

这是我的代码:

Serializers.py

from django.contrib.auth.models import User
from rest_framework import serializers
from django.contrib.auth.models import models

class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        lookup_field = 'username'
        set_timezone = 'date_joined'
        fields = ('url', 'username','date_joined')

Views.py

from django.contrib.auth.models import User
from rest_framework import viewsets
from tutorial.quickstart.serializers import UserSerializer
from django.conf import settings
from django.shortcuts import redirect, render
dir(settings)
settings.__dict__



class UserViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows users to be viewed or edited.
    """
    lookup_field = 'username'
    queryset = User.objects.all()
    serializer_class = UserSerializer

urls.py

from django.conf.urls import url, include
from rest_framework import routers
from tutorial.quickstart import views

router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)

urlpatterns = [
    url(r'^', include(router.urls)),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

Models.py

from django.db import models
# Create your models here.
from datetime import datetime

class Time(models.Model):
   timestamp = models.DateTimeField(auto_now_add=True)

   def __unicode__(self):
       return "Time"

错误

Exception Value:
Field name timestamp is not valid for model User. Exception Location: /Library/Python/2.7/site-packages/rest_framework/serializers.py in build_unknown_field, line 1079 Python Executable: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python Python Version: 2.7.6

您最好使用 Django 中的 AbstractBaseUser 来构建您自己的用户模型。这比创建新的专用 Time 模型以及随之而来的 DRF 自定义关系字段更简单。

例如:

from django.contrib.auth.models import AbstractBaseUser
from django.db import models

class CustomUser(AbstractBaseUser):
    timestamp = models.DateTimeField()

然后,在您的 DRF 序列化程序中:

from rest_framework import serializers

class CustomUserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = CustomUser
        lookup_field = 'username'
        set_timezone = 'date_joined'
        fields = ('url', 'username','date_joined', 'timestamp')