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

Django中如何利用表单action属性结合对象pk?

解决方案

你可以通过Django的模板URL标签{% url %}来指定表单的action属性,同时将当前对象的pk传递进去,具体实现如下:

方法一:利用视图上下文传递pk

  1. 在类视图中把pk传入模板上下文
    在你的ObjectView类里,重写get_context_data方法,将URL中捕获的pk添加到模板可用的上下文:

    class ObjectView(View):
        # 保留原有的get、post方法
        
        def get_context_data(self, **kwargs):
            context = super().get_context_data(**kwargs)
            # 从视图的kwargs中提取pk,传递给模板
            context['target_pk'] = self.kwargs['pk']
            return context
    
  2. 修改表单的action属性
    在模板里用{% url %}标签生成对应URL,替换空的action:

    <form action="{% url 'app:add' target_pk %}" method="post">
        {% csrf_token %}
        
        {{ form }}
    
        <input type="submit" value="Invite">
        
    </form>
    

方法二:直接调用视图的kwargs(更简洁)

如果你的类视图是Django通用视图(如DetailView、FormView),或者自定义视图已继承相关基类,可以直接在模板中通过view.kwargs.pk获取URL中的pk值,省去重写get_context_data的步骤:

<form action="{% url 'app:add' view.kwargs.pk %}" method="post">
    {% csrf_token %}
    
    {{ form }}

    <input type="submit" value="Invite">
    
</form>

注意事项

  • 确保{% url %}中的命名空间(app:)和URL名称(add)与urls.py里的配置完全匹配(你提供的跳转链接里用了add_users,这可能是笔误,建议统一为URL配置的add)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:53:16