【发布时间】:2021-08-10 16:04:41
【问题描述】:
我正在尝试从外键相关模型中获取随机“n”条记录。假设我有两个名为 Exam 和 Questions 的模型。我需要一个 API 端点来获取一个特定主题的 n 个问题(例如数学,n 个随机数学问题)。端点在检索特定主题的所有问题方面运行良好。
models.py
class Exam(models.Model):
name = models.CharField(max_length=255)
def __str__(self):
return self.name
class Question(models.Model):
exam = models.ForeignKey(Exam, on_delete=models.CASCADE)
question = models.CharField(max_length=255)
def __str__(self):
return '{} - {}'.format(self.question)
serializers.py
class QuestionSerializer(serializers.ModelSerializer):
questions = serializers.CharField(read_only=True)
answer = serializers.CharField(read_only=True)
class Meta:
model = Question
fields = '__all__'
class ExamSerializer(serializers.ModelSerializer):
name = serializers.CharField(read_only=True)
questions = QuestionSerializer(many=True, read_only=True, source='question_set')
class Meta:
model = Exam
fields = '__all__'
api_views.py
class ExamQuestionRetrieveAPIView(generics.RetrieveAPIView):
authentication_classes = [JWTTokenUserAuthentication]
serializer_class = ExamSerializer
queryset = Exam.objects.all()
lookup_field = 'name'
查看文档后,我尝试使用to_representation() 方法过滤并获取随机记录,但失败了。非常感谢任何帮助。
【问题讨论】:
-
queryset = Exam.objects.all('?')并且您可以使用分页仅选择n项目。 -
@WillemVanOnsem 是的,我也有这个想法 :) 但它可以暴露所有问题。
-
这就是分页的内容,或者您可以通过覆盖
get_queryset方法来限制它。 -
对于问题模型...必须调查一下:)
标签: django django-models django-rest-framework django-serializer