Django中未设置初始表单字段

62o28rlo  于 2023-07-01  发布在  Go
关注(0)|答案(1)|浏览(99)

我有以下设置。
型号:

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

形式:

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

浏览次数:

@login_required
def feedbackPage(request):
    username = request.user.id
    if request.method == 'POST':
        form = FeedbackModelForm(request.POST, initial={'user_id': username})
        if form.is_valid():
            form.save()
            return redirect('feedback_success')
    else:
        form = FeedbackModelForm()

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

Print(username)显示当前已验证的用户ID。
在保存过程中,它不保存user_id字段(它是NULL)。
我需要从已验证用户保存的user_id字段。

idv4meu8

idv4meu81#

看起来问题是当你在视图函数中创建对象时如何设置用户id。您的代码正在将一个名为'user_id'的表单设置为请求对象中的用户id,但这将不起作用,因为您已经在FeedbackModelForm类中排除了'user_id'。
不要尝试为表单设置初始值,而是尝试直接在对象上设置user_id字段,然后手动保存它。就像这样:
views.py

@login_required
def feedbackPage(request):
    if request.method == 'POST':
        form = FeedbackModelForm(request.POST)
        if form.is_valid():
            feedbackObj = form.save(commit=False)  # commit=False means that the form is not saved to the database yet
            feedbackObj.user_id = request.user  # set the user to the current user
            feedbackObj.save()  # save the form to the database
            return redirect('feedback_success')
    else:
        form = FeedbackModelForm()

这应该可以解决这个问题。(至少,我认为它会)

相关问题