Python Django Url路由器问题

Python Django Url路由器问题,python,django,django-rest-framework,Python,Django,Django Rest Framework,我正在尝试在Django中创建url路由器,该路由器支持以下url: http://localhost:8000/location/configuration http://localhost:8000/location/d3d710fcfc1391b0a8182239881b8bf7/configuration urlr“^locations/configuration$”, location_config.as_view,name=location config, urlr“^locatio

我正在尝试在Django中创建url路由器,该路由器支持以下url:

http://localhost:8000/location/configuration http://localhost:8000/location/d3d710fcfc1391b0a8182239881b8bf7/configuration urlr“^locations/configuration$”, location_config.as_view,name=location config, urlr“^locations/?P[\w]+/configuration$”, location\u config.as\u视图,name=位置配置uri 每当我想打http://localhost:8000/location/configuration,它选择了第二种URL路由格式,而不是第一种

错误:

在/locations/configuration/get-missing处出现类型错误,需要1个 位置参数:“位置\键”


有谁能帮我看看url路由格式出了什么问题吗?

django会在默认情况下使用详细信息视图时查找pk。您必须使用get\u对象覆盖它

就你而言

def get_object(self, queryset=None): 
    location_key = self.kwargs.get('location_key')
    obj = Model.objects.get(id=location_key)
    return obj

不,它确实选择了第一个没有参数的模式,但是您在这两个模式中使用相同的视图,并且location\u config视图具有必需的参数location\u键,当第一个模式与URL匹配时,不会提供该键。这就是错误消息所说的

因此,请编写另一个不需要location_key参数或更改此视图定义的视图:将默认值添加到参数

def location_config(request, location_key=None):
    ....

现在它不是必需的位置参数。

为什么不使用此urlr“^locations/configuration/?p[\w]+/$”,location\u config.as\u view,name=location config uri?@shaikmoeed我正在迁移用ruby编写并已在生产中运行的旧项目。我无法更改url结构。我必须保持结构不变。我想你需要显示你的视图位置。\u配置你能发布你的视图吗.py并尝试从?P[\w]+更改为?P[\w-]+抱歉,我不能,但问题是在到达视图之前在路由器端。下面的错误清楚地说明了这一点。错误:get缺少1个必需的位置参数:“location_key”。由于url中未使用pk,因此出现此错误。如果你用任何东西代替pk,你必须在你的视图中定义它。什么是pk??当我通过location config api点击时,我可以获得location_键。类位置\配置视图:“获取位置配置”定义getself、请求、位置\键: