You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否跨urls.py文件使用slug?遇FieldError错误求排查

问题排查:跨urls.py传递slug引发FieldError错误

报错信息

FieldError at /new-api/tournaments/fifa-world-cup/teams/
Unsupported lookup 'custom_url' for ForeignKey or join on the field not permitted.

问题背景

我尝试从另一个urls.py文件中获取slug字段,想知道报错原因是否是无法跨urls.py使用slug,或是其他问题。项目的路由和视图代码如下:

项目代码

tournament模块 urls.py

urlpatterns = [
    path("", views.getNewTournaments, name="tournaments"),
    path("<slug:custom_url>/", views.getNewTournament, name="tournament"),
    path("create/", views.postNewTournament, name="post-tournament"),
    path("<slug:custom_url>/teams/", include("teams.urls"), name="tournament-teams"),
]

teams模块 urls.py

urlpatterns = [
    path("", views.teams.as_view(), name="teams"),
]

tournament模块 views.py

@api_view(["GET"])
def getNewTournaments(request):
    tournaments = NewTournament.objects.all()
    serializer = NewTournamentSerializer(tournaments, many=True)
    return Response(serializer.data)

teams模块 views.py

class teams(APIView):
    def get(self, request, custom_url):
        teams = Team.objects.filter(tournament__custom_url=custom_url)
        serializer = TeamSerializer(teams, many=True)
        return Response(serializer.data)

错误原因与解决方案

这个错误和跨urls.py使用slug完全无关,问题出在ORM查询逻辑上:

  • 你的Team模型里的tournament外键关联的NewTournament模型,不存在名为custom_url的数据库字段,或者该字段是通过@property定义的非数据库属性(无法用于ORM跨表查询)。
  • 路由部分的配置是正确的,custom_url已经成功传递给了teams视图的get方法,跨urls.py传递参数是完全可行的。

解决步骤:

  1. 检查NewTournament模型,确认是否存在custom_url字段,且是数据库字段(比如SlugField类型)。
  2. 如果NewTournament中存储slug的字段名不是custom_url(比如叫slug),把查询语句修改为:Team.objects.filter(tournament__slug=custom_url)。
  3. 确认Team模型的tournament外键确实关联的是NewTournament模型,没有关联错误。

内容的提问来源于stack exchange,提问作者Martin Arreola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 13:27:09