首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django Rest框架ViewSet中的404错误

Django Rest框架ViewSet中的404错误
EN

Stack Overflow用户
提问于 2018-04-20 11:01:39
回答 1查看 1.5K关注 0票数 1

对于Django Rest框架,Im仍然是新的,我想使用URL参数过滤查询集。

这是我的models.py

代码语言:javascript
复制
class Offre(models.Model):          
    title = models.CharField(max_length=100, blank=True, default=0)
    secteur = models.CharField(max_length=50, null=True)
    idRecruteur = models.ForeignKey(Recruteur,verbose_name = "idRecruteur", on_delete=models.CASCADE, default=None)
    def __str__(self):
        return "Offre: {}".format(self.title)   

这是我在urls.py所做的

代码语言:javascript
复制
router = DefaultRouter();
router.register(r'OffresByRecruteur/(?P<idRecruteur_id>\d+)/$', OffreRecruteurViewSet, base_name='inoutreports')
urlpatterns = router.urls

最后,api.py

代码语言:javascript
复制
class OffreRecruteurViewSet(ModelViewSet):
    queryset = Offre.objects.all()
    serializer_class = OffreSerializer

    def get_queryset(self, *args, **kwargs):
        return self.queryset.filter(idRecruteur_id=self.request.GET.get('idRecruteur_id'))

这会产生

代码语言:javascript
复制
Using the URLconf defined in djangular.urls, Django tried these URL patterns, in this order: 
   ^scrumboard/ ^OffresByRecruteur/(?P<idRecruteur_id>\d+)/$/$ [name='inoutreports-list']
   ^scrumboard/ ^OffresByRecruteur/(?P<idRecruteur_id>\d+)/$\.(?P<format>[a-z0-9]+)/?$ [name='inoutreports-list']
   ^scrumboard/ ^OffresByRecruteur/(?P<idRecruteur_id>\d+)/$/(?P<idRecruteur>[^/.]+)/$ [name='inoutreports-detail']
   ^scrumboard/ ^OffresByRecruteur/(?P<idRecruteur_id>\d+)/$/(?P<idRecruteur>[^/.]+)\.(?P<format>[a-z0-9]+)/?$ [name='inoutreports-detail']
The current path, scrumboard/OffresByRecruteur/1/, didn't match any of these.

我做错什么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-20 11:12:24

您注册视图集的正则表达式不应该以/$结束。Rest框架默认情况下将是加斜杠,您不需要美元,因为它与字符串的末尾匹配。

代码语言:javascript
复制
router.register(r'OffresByRecruteur/(?P<idRecruteur_id>\d+)/', OffreRecruteurViewSet, base_name='inoutreports')

其次,当您获得查询集时,您应该从idRecruteur_id获得self.kwargs。您可以使用self.request.GET从查询字符串中获取信息,例如,如果URL是/scrumboard/OffresByRecruteur/?idRecruteur_id=1

代码语言:javascript
复制
def get_queryset(self, *args, **kwargs):
    return self.queryset.filter(idRecruteur_id=self.kwargs['idRecruteur_id']))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49940180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档