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

使用django-htmx时,能否通过HTMX返回Django Model实例?

使用Django+htmx传递Model实例的问题

你在模板里通过hx-vals传递auszubildender(Django默认User模型实例)时,后端用request.POST.get("auszubildender")拿到的是用户名字符串,核心问题和解决方式如下:

  • 不能直接传递Model实例:HTTP请求(包括POST)本质只能传输文本/字符串类型的数据,无法直接传递Python层面的Model对象——模板里的{{auszubildender}}其实是调用了User模型的__str__方法,返回的就是用户名,所以后端拿到的是字符串。

  • 推荐方案:传递实例的PK
    这是最可靠的方式,PK是Model实例的唯一不可变标识:

    1. 修改模板中的hx-vals:
      {% for auszubildender in auszubildende %}
      <div 
          hx-post="/htmxFunctions/azubiAnzeigen" 
          hx-trigger="click" 
          hx-target="#content"
          hx-vals='{ "test": "test", "auszubildender_pk": "{{ auszubildender.pk }}" }'>
          {% if auszubildender.first_name  %}
          [...]
          {% endif %}
      </div>
      {% endfor %}
      
    2. 后端通过PK查询实例:
      from django.contrib.auth.models import User
      
      auszubildender_pk = request.POST.get("auszubildender_pk")
      if auszubildender_pk:
          try:
              auszubildender = User.objects.get(pk=auszubildender_pk)
              # 后续处理逻辑
          except User.DoesNotExist:
              # 处理实例不存在的情况
              pass
      
  • 额外说明:如果用用户名查询也能实现,但PK比用户名更稳定(用户名可能被修改,PK始终不变),所以优先用PK。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:50:24