2014-10-28 47 views
0

我有一个工作正常的FormView CBV(显示一个ModelForm)。但是,我现在想要在表单中附加一个“created_by”属性,并将其保存到数据库中。这个“created_by”字段应该是已填写表格的当前登录用户。提交后将用户附加到Django ModelForm/FormView

我试过推迟form.save(),追加request.user,然后保存所有内容......但是页面只是重定向到自己,并且模型数据不会被添加。思考?

相关models.py

class Event(models.Model): 
    title = models.CharField(max_length=255) 
    submitted_date = models.DateField(auto_now=True, verbose_name='Date Submitted') 
    created_by = models.ForeignKey(User) 
    event_date = models.DateField() 

相关views.py

class PostEventView(FormView): 
    form_class = EventForm 
    template_name = "event-submit.html" 

    def form_valid(self, form): 
     form = form.save(commit=False) 
     form.created_by = self.request.user 
     form.save() 
     messages.success(self.request, 'Your event was submitted successfully. Thank you for taking the time to add this opportunity!') 
     return HttpResponseRedirect(reverse_lazy('single_event', kwargs={'slug': form.slug})) 

的思考?

+0

您是否尝试过[覆盖保存功能](http://trickveda.wordpress.com/2014/01/22/overriding-save-method-in-django-models/)?该链接有帮助。 – cshortt 2014-10-28 16:35:07

+3

您确定此表单有效吗?您可能需要从EventForm中排除'created_by'。 – 2014-10-28 16:35:40

+0

@DanielRoseman ......完全错过了它,因为在'created_by'中加入是事后的想法。我没有从ModelForm中排除它。解决了它! – rnevius 2014-10-28 16:37:56

回答

0

感谢@丹尼尔罗斯曼指出我忘记了exclude = ['created_by']从我的ModelForm。添加这个字段是事后的想法,因此我已经忘记了exclude它。我的模板也丢失了{{ form.non_field_errors }},这解释了为什么我没有看到任何验证错误。

相关问题