Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 在我们的投票问题中我怎么能有计时器?德扬戈_Django_Rest_Django Rest Framework - Fatal编程技术网

Django 在我们的投票问题中我怎么能有计时器?德扬戈

Django 在我们的投票问题中我怎么能有计时器?德扬戈,django,rest,django-rest-framework,Django,Rest,Django Rest Framework,我们有一组最多20个问题的调查问题,但我们最多可以选择5个随机问题,每个阶段一个,但我不希望人们能够通过验证客户端来欺骗时间,但每个问题都有1分钟的时间,一旦过期,下一个问题将被删除 模型 import datetime from django.db import models from django.utils import timezone class Question(models.Model): question_text = models.CharField(max_le

我们有一组最多20个问题的调查问题,但我们最多可以选择5个随机问题,每个阶段一个,但我不希望人们能够通过验证客户端来欺骗时间,但每个问题都有1分钟的时间,一旦过期,下一个问题将被删除

模型

import datetime

from django.db import models
from django.utils import timezone


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    duration = models.IntegerField(min=0, max=60)
    code = models.TextField(max_length=1024*2,default='SOME STRING')

    def __str__(self):
        return self.question_text

    def was_published_recently(self):
        now = timezone.now()
        return now - datetime.timedelta(days=1) <= self.pub_date <= now

    def choices(self):
        if not hasattr(self, '_choices'):
            self._choices = self.choice_set.all()
        return self._choices

    def max_voted_choice(self):
        if not hasattr(self, '_max_voted_choice'):
            choices = self.choice_set.order_by('-votes')
            if not choices:
                self._max_voted_choice = None
            else:
                self._max_voted_choice = choices[0]
        return self._max_voted_choice



class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

    def __str__(self):
        return self.choice_text
序列化程序


class QuestionListPageSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    question_text = serializers.CharField(max_length=200)
    pub_date = serializers.DateTimeField()
    was_published_recently = serializers.BooleanField(read_only=True) # Serializer is smart enough to understand that was_published_recently is a method on Question
    code = serializers.CharField(max_length=200)

    def create(self, validated_data):
        return Question.objects.create(**validated_data)

    def update(self, instance, validated_data):
        for key, value in validated_data.items():
            setattr(instance, key, value)
        instance.save()
        return instance

如果我正确理解了你的问题,你希望在有问题的页面上有一个倒计时的计时器

这看起来更像是应该用JavaScript实现的东西,而不是Django(类似这样的东西)

然后,使用ajax通过API调用将处理的任何操作发送到Django后端。这里有一个关于如何做这件事的教程

希望这能帮助你,或者为你指明正确的方向


class QuestionListPageSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    question_text = serializers.CharField(max_length=200)
    pub_date = serializers.DateTimeField()
    was_published_recently = serializers.BooleanField(read_only=True) # Serializer is smart enough to understand that was_published_recently is a method on Question
    code = serializers.CharField(max_length=200)

    def create(self, validated_data):
        return Question.objects.create(**validated_data)

    def update(self, instance, validated_data):
        for key, value in validated_data.items():
            setattr(instance, key, value)
        instance.save()
        return instance