添加可以通过 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')
我是 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 nametimestamp
is not valid for modelUser
. 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')