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
相关产品推荐
相关产品推荐

