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

如何在Django中为关联字段正确设置Session实例

正确设置Subscription的session属性

报错原因是你给form.instance.session赋值的是Session模型的类对象(request.session.model),而字段要求的是一个Session实例。

要获取当前请求对应的Session实例,你需要通过request.session.session_key拿到当前会话的key,再从Session模型中查询对应的实例:

首先导入Session模型:

from django.contrib.sessions.models import Session

然后修改视图中的赋值代码:

@login_required
@require_POST
def subscr_view(request):
    form = SubscriptionForm(request.POST)
    if form.is_valid():
        # 获取当前请求的Session实例
        session_instance = Session.objects.get(session_key=request.session.session_key)
        form.instance.session = session_instance
        form.instance.user = request.user
        subscr = form.save()
        return JsonResponse({'subscription': subscr.id}, status=201)
    return JsonResponse({'errors': list(form.errors.keys())})

另外,如果你担心Session实例不存在的情况(虽然@login_required已经确保用户有有效会话),可以用get_object_or_404替代get,返回404错误:

from django.shortcuts import get_object_or_404

# ...
session_instance = get_object_or_404(Session, session_key=request.session.session_key)

这样就能正确将当前会话的实例赋值给Subscription的session字段,解决报错问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 18:44:58