我有一个模型,其中有一个作者ForeignKey
,如下:
class Appointment(models.Model):
# ...
author = models.ForeignKey(User)
我希望在为当前登录用户创建约会时自动设置author
字段。换句话说,作者字段不应出现在我的Form类中:
class AppointmentCreateForm(ModelForm):
class Meta:
model = Appointment
exclude = ('author')
有两个问题:
author
?答案 0 :(得分:7)
以下似乎稍微简单一些。请注意,self.request在View.as_view
class AppointmentCreateView(CreateView):
model=Appointment
form_class = AppointmentCreateForm
def get_form(self, form_class):
form = super(AppointmentCreateView, self).get_form(form_class)
# the actual modification of the form
form.instance.author = self.request.user
return form
答案 1 :(得分:2)
我已经修改了我的通用视图子类:
class AppointmentCreateView(CreateView):
model=Appointment
form_class = AppointmentCreateForm
def post(self, request, *args, **kwargs):
self.object = None
form_class = self.get_form_class()
form = self.get_form(form_class)
# the actual modification of the form
form.instance.author = request.user
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)
这里有一些重要的部分:
instance
字段,其中包含将要保存的实际模型。form_class
self.object = None
行,将重载和基数合并到一个函数(我没有在super
中调用post
。)我认为这是解决相当常见问题的好方法,而且我再一次不必编写自己的自定义视图。