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

Django中初始表单user_id字段无法设置,保存后为NULL的问题

解决方法

你遇到的问题是因为initial参数仅用于设置表单的初始显示值,而你的表单已经排除了user_id字段,所以这个值不会被表单处理和保存。正确的做法是在表单验证通过后,手动将当前登录用户关联到反馈对象,再保存到数据库。

修改后的视图代码:

@login_required
def feedbackPage(request):
    if request.method == 'POST':
        form = FeedbackModelForm(request.POST)
        if form.is_valid():
            # 生成反馈对象但不立即提交到数据库
            feedback_instance = form.save(commit=False)
            # 关联当前登录用户
            feedback_instance.user_id = request.user
            # 保存完整数据
            feedback_instance.save()
            return redirect('feedback_success')
    else:
        form = FeedbackModelForm()

    context = {'form': form}
    return render(request, 'feedback.html', context)

额外优化建议

Django中ForeignKey字段的命名建议直接用关联模型的单数形式(比如user而非user_id),框架会自动在数据库中生成user_id的列名,这样代码更符合规范。修改后的模型、表单如下:

模型:

class Feedbacks(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
    feedback = models.TextField()
    rating = models.IntegerField()

表单:

class FeedbackModelForm(ModelForm):
    class Meta:
        model = Feedbacks
        exclude = ['user']

视图对应修改:
将feedback_instance.user_id = request.user改为feedback_instance.user = request.user。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:42:05