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

基于URL中的slug自动填充Django外键字段的实现需求

基于URL中的Slug自动填充Post的Game外键字段

实现方案:

1. 修改CreatePost视图

从URL参数中获取游戏slug,自动匹配对应的Game对象并赋值给Post实例,同时移除表单中的手动选择项:

修改posts/app/views.py:

from django.shortcuts import get_object_or_404

class CreatePost(LoginRequiredMixin, SelectRelatedMixin, generic.CreateView):
    fields = ('title','message')  # 移除game字段,不再让用户手动选择
    model = models.Post
    select_related = ('user', 'game')

    def form_valid(self, form):
        # 从URL中获取slug,查询对应Game(不存在则返回404)
        game = get_object_or_404(models.Game, slug=self.kwargs['slug'])
        # 为Post实例设置当前用户和匹配到的Game
        form.instance.user = self.request.user
        form.instance.game = game
        return super().form_valid(form)

2. 确认URL配置

你的posts/app/urls.py中已经正确配置了带slug参数的路由:

urlpatterns = [
    path('', views.PostList.as_view(), name="all"),
    path("new/<slug>/", views.CreatePost.as_view(), name="create"),
]

无需额外修改,该路由会将URL中的slug传递到视图的kwargs中。

3. 额外验证(可选)

Post模型中的get_absolute_url方法已经使用self.game.slug生成跳转链接,只要game字段被正确填充,该方法就能正常工作,无需调整。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:05:30