【发布时间】:2020-10-16 01:10:57
【问题描述】:
我想为我的 api 创建简单的过滤。我想在我的网址中搜索的是: /api/videoquestionset/2/
并根据开发人员的要求,获取视频字段为 2 或任何其他数字的每个 videoquestion 对象。
我现在得到的错误是:
get() returned more than one VideoQuestions -- it returned 2!
这是我的代码:
models.py
class Questions(models.Model):
"""
Questions class for the e-learner overlay
"""
question_text = models.CharField(max_length=150)
answer = models.OneToOneField(QuestionAnswers, on_delete=models.CASCADE,
related_name='correct_answer', null=True, blank=True)
choices = models.ManyToManyField(QuestionAnswers, related_name='choices')
class Meta:
verbose_name_plural = "Questions"
class VideoQuestions(models.Model):
"""
Categorize questions per video
"""
video = models.ForeignKey(Video, on_delete=models.CASCADE)
created = models.DateTimeField()
question = models.ManyToManyField(Questions, blank=True, related_name='question')
class Meta:
verbose_name_plural = "learner questions"
views.py:
class VideoQuestionSet(viewsets.ModelViewSet):
serializer_class = VideoQuestionSerializer
queryset = VideoQuestions.objects.all()
lookup_field = 'video'
# def get_queryset(self):
# queryset = VideoQuestions.objects.all()
# video = self.request.query_params.get('video', None)
# if video is not None:
# queryset = queryset.filter(video=video)
# return queryset
我的 urls.py:
from django.conf.urls import include, url
from rest_framework import routers
from .views import VideoQuestionsListView, VideoQuestionSet
router = routers.DefaultRouter()
router.register(r'videoquestions', VideoQuestionsListView, basename='vq-list'),
router.register(r'videoquestionset', VideoQuestionSet, basename='vq-detail'),
urlpatterns = [
url(r'', include(router.urls))
]
我尝试了什么:
- Django 使用正则表达式进行过滤,例如 /videoquestionset/?v=2。我实在想不通过滤掉,所以我恢复到我的旧代码。
【问题讨论】:
标签: python-3.x django api django-rest-framework django-views