python - Django Rest Framework ViewSet 出现 404 错误

标签 python django django-rest-framework django-urls

我对 Django Rest Framework 还很陌生,我想使用 URL 参数过滤查询集。

这是我的models.py:

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中所做的:

router = DefaultRouter();
router.register(r'OffresByRecruteur/(?P<idRecruteur_id>\d+)/$', OffreRecruteurViewSet, base_name='inoutreports')
urlpatterns = router.urls

最后api.py:

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'))

这会生成

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.

我做错了什么?

最佳答案

用于注册 View 集的正则表达式不应以 /$ 结尾。 Rest框架将add the slash默认情况下,您不需要美元,因为它与字符串的结尾匹配。

router.register(r'OffresByRecruteur/(?P<idRecruteur_id>\d+)/', OffreRecruteurViewSet, base_name='inoutreports')

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

def get_queryset(self, *args, **kwargs):
    return self.queryset.filter(idRecruteur_id=self.kwargs['idRecruteur_id']))

关于python - Django Rest Framework ViewSet 出现 404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49940180/

相关文章:

python - 字段名称选择 'reference' 不是有效选择问题

python - API 响应文本到 JSON

python - 延迟加载模块导入 __init__.py 文件 python

Python:如果 URL 作为第二个、第三个等列表项传递,则无法从网站获取数据,但适用于第一个列表项和直接 URL 如何解决此问题?

django - 如何使用 ajax 在 Django 中创建过滤的下拉选项字段?

javascript - 单击按钮时返回 true 不适用于 javascript

python - 为什么用户在 Django 测试用例中自动进行身份验证?

python - matplotlib 绘制多个散点图,每个散点图由不同的第三变量着色

python - django如何上传文件夹

python - Django 1.4.1 'settings.DATABASES improperly configured' 错误