Django通过BrowsableAPI休息框架列表并使用自定义按钮创建

时间:2018-02-05 17:41:08

标签: django django-rest-framework

我是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条记录,并且添加了它,并且没有帮助

0 个答案:

没有答案