gpt4 book ai didi

python - 在 django vanilla CreateView 上设置当前用户

转载 作者:行者123 更新时间:2023-11-28 17:29:16 25 4
gpt4 key购买 nike

我想用当前登录的用户更新我的模型。我正在使用 django-vanilla-views。要存储新记录,我正在尝试使用 CreateView。我不想在表单上显示用户,只是自动更新它。

这是我的模型:

class Measurement(models.Model):
date = models.DateField()
user = models.ForeignKey(User)

这是我的观点:

class CreateMeasurement(CreateView):
model = Measurement
fields = ['date']
success_url = reverse_lazy('list_measurements')

def get_form(self, data=None, files=None, **kwargs):
kwargs['user'] = self.request.user
return super(CreateMeasurement, self).get_form(data=data, files=files, **kwargs)

不幸的是,在访问 View 时出现以下异常:

TypeError: __init__() got an unexpected keyword argument 'user'

我还尝试为我的模型创建一个 ModelForm,但得到了完全相同的错误。知道我可能做错了什么吗?

最佳答案

您不需要将用户传递给表单,因此不要覆盖 get_form 方法。您已经通过在 View 中设置 fields 将用户 field 排除在模型表单之外,因此您也不需要自定义模型表单。

覆盖 form_valid 方法并在保存表单时设置用户应该就足够了。

from django.http import HttpResponseRedirect

class CreateMeasurement(CreateView):
model = Measurement
fields = ['date']
success_url = reverse_lazy('list_measurements')

def form_valid(self, form):
obj = form.save(commit=False)
obj.user = self.request.user
obj.save()
return HttpResponseRedirect(self.get_success_url())

关于python - 在 django vanilla CreateView 上设置当前用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35751772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com