django - 有没有办法在 DRF 中对新数据的每个 GET 请求重新加载 ViewSet?
问题描述
我正在尝试从我的模型中生成一个随机对象。问题是它只能工作一次,然后我必须重新启动服务器才能获得一个新对象。它只是一直给我相同的对象,直到重新启动。
我一直在寻找堆栈溢出的解决方案,但没有找到任何解决方案。
视图.py
def dailyaskist(category):
qs = Task.objects.filter(category=category)
max_num = len(qs)
while True:
pk = random.randint(1, max_num)
task = Task.objects.filter(pk=pk).first()
if task:
return task.pk
class DailyTaskEcommerceViewSet(viewsets.ModelViewSet):
category = 'ecommerce'
task_pk = dailyaskist(category)
queryset = Task.objects.filter(pk=task_pk)
serializer_class = TaskSerializer
序列化程序.py
class StepSerializer(serializers.HyperlinkedModelSerializer):
task_id = serializers.PrimaryKeyRelatedField(queryset=Task.objects.all(), source='task.id')
class Meta:
model = Step
fields = ('title', 'description', 'done', 'task_id')
class TaskSerializer(serializers.HyperlinkedModelSerializer):
steps = StepSerializer(many=True, read_only=True)
class Meta:
model = Task
fields = ('title', 'description', 'video', 'done', 'steps')
模型.py
Categories = (
('ecommerce', 'Ecommerce'),
)
class Task(models.Model):
title = models.CharField(max_length=50)
description = models.TextField(max_length=360)
video = models.CharField(max_length=30, default='')
category = models.CharField(choices=Categories, default='', max_length=30)
done = models.BooleanField(default=False)
def __str__(self):
return self.title
class Step(models.Model):
task = models.ForeignKey(Task, related_name='steps', on_delete=models.CASCADE)
title = models.CharField(max_length=50)
description = models.TextField(max_length=360)
done = models.BooleanField(default=False)
def __str__(self):
return self.title
每次使用 DailyTaskEcommerceViewSet 发出 GET 请求时,我都想接收一个新对象(任务)。
提前致谢!:D
解决方案
你会在一个方法中做到这一点。在这种情况下,get_queryset
似乎是正确的地方。
class DailyTaskEcommerceViewSet(viewsets.ModelViewSet):
serializer_class = TaskSerializer
category = 'ecommerce'
def get_queryset(self):
task_pk = dailyaskist(self.category)
return Task.objects.filter(pk=task_pk)
推荐阅读
- python - 包含多个 python 文件的 Python 程序
- r - 特定格式数据框中数值变量的汇总统计
- amazon-web-services - boto3 如何找到承担角色提供者
- react-native - 在 react-native 中构建签名发布 APK 的正确方法是什么?
- routes - 路由数百万条路径
- php - PHP 如何将数字(年份)转换为文本 ex。1996 = 十九九十六,而 2004 = 两千四
- php - 如何仅显示以前与 [PHP] 聊天的用户
- git - Git 分支过滤选择的文件
- oracle - ORA-02395: 超出了 IO 使用的调用限制并使用游标作为替代
- java - ChipNavigationBar如何初始化java代码