我正在开发一个消息传递系统,我想根据当前登录的用户设置消息的发起者。
class Message(models.Model):
originator = models.ForeignKey(User, related_name='+')
destination = models.ForeignKey(User, related_name='+')
subject = models.CharField(max_length=100)
content = models.TextField()
我使用 ModelForm 和 CreateView 来表示:
class MessageForm(forms.ModelForm):
class Meta:
model = Message
fields = ('destination', 'subject', 'content')
所以在保存这个表单之前,originator
需要设置为当前登录的用户。我不认为在这里覆盖save
模型的方法是合适的,所以我打算在表单的save
方法中这样做,但是我无权访问请求变量。在另一个 CreateView 帖子中,建议是覆盖该get_form_kwargs
方法:
class MyFormView(FormView):
def get_form_kwargs(self):
# pass "user" keyword argument with the current user to your form
kwargs = super(MyFormView, self).get_form_kwargs()
kwargs['user'] = self.request.user
return kwargs
但是这不起作用,因为您实际上不能将 kwarg 传递user
给 ModelForm,因为 ModelForm 不接受自定义参数。
originator
用用户信息更新变量的最佳(最干净和最实用)的方法是什么?