我是DRF的新手,需要一些建议。
我为每天创建了某种持续时间记录,可以手动输入持续时间,这里是模型:
from django.db import models
from datetime import datetime, date
class Record(models.Model):
recordDate = models.DateField(blank=True, default=date.today)
hourAchieved = models.IntegerField(blank=True, default=0)
class Meta:
ordering = ["recordDate"]
def __str__(self):
return "Achieved "+str(self.hourAchieved)+" hour(s)!"
适用于这些 APIview:
from rest_framework import generics
from .models import Record
from .serializers import (
recordListSerializer,
recordUpdateSerializer
)
class recordList(generics.ListCreateAPIView):
queryset = Record.objects.all()
serializer_class = recordListSerializer
class recordUpdate(generics.RetrieveUpdateAPIView):
queryset = Record.objects.all()
serializer_class = recordUpdateSerializer
然后,我想改善输入过程,创建一个按钮来获取'start_time'和另一个按钮来获取'end_time'并为我计算时间而不是记住和输入持续时间(小时)我自己。
所以,我找到了'TemplateHTMLRender'并决定将其用作:
class recordList(generics.ListCreateAPIView):
queryset = Record.objects.all()
serializer_class = recordListSerializer
renderer_classes = (TemplateHTMLRenderer,)
template_name = 'myTemp.html'
def get(self, request):
records = self.get_queryset()
serializer = recordListSerializer(records,many=True,context={'request': request})
return Response({'serializer': serializer, 'record':records})
这是 myTemp.html:
{% load rest_framework %}
<html>
<body>
<h1>Neew Era of REST</h1>
<form action="{% url 'record:list' %}" method="POST">
{% csrf_token %}
{% render_form serializer %}
<input type="submit" value="Save">
</form>
</body>
</html>
这就是问题,它告诉我
'ListSerializer'对象不可迭代
我不知道......
编辑:Serializers.py
from rest_framework import serializers
from .models import Record
from datetime import date
from django.urls import reverse
class recordListSerializer(serializers.ModelSerializer):
Add = serializers.HyperlinkedIdentityField(
read_only=True,
view_name='record:detail'
)
class Meta:
model = Record
fields = '__all__'
def validate(self, data):
try:
todayRecord = Record.objects.get(recordDate=date.today())
except Record.DoesNotExist:
todayRecord = None
if todayRecord is not None:
raise serializers.ValidationError("You recorded for today!")
return data
PS。我之所以这么想是因为我只有1条记录,并且添加了它,并且没有帮助