我有一个FormView,它生成对一个对象(它通常与之相关)的审查,然后将其链接到该对象,并在表单完成时保存它。在
我遇到的问题是我无法保存我想要连接的对象的数据。这意味着我需要“查找”上下文(模板呈现)的有效处理(进行链接)和成功(生成适当的反向url)。在
有没有更好的方法将评论绑定到对象?或者更好的是,有没有一种方法可以持久化我丢失的表单数据?在
编辑:抱歉,登录装饰器正在调度中。我删除了这个方法,因为SO抱怨代码太多,我认为它不相关。。。我一定是错过了装饰工
class ReviewCreate(FormView):
template_name = 'food/item_add_review.html'
form_class = ReviewForm
review_item = None
def get_context_data(self, **kwargs):
context = super(ReviewCreate, self).get_context_data(**kwargs)
item_modelname = self.kwargs.get('model')
item_model = apps.get_model('food',item_modelname)
review_item = get_object_or_404(item_model,pk=self.kwargs.get('pk'))
context['item'] = review_item
return context
def form_valid(self, form):
item_modelname = self.kwargs.get('model')
item_model = apps.get_model('food',item_modelname)
review_item = get_object_or_404(item_model,pk=self.kwargs.get('pk'))
r = form.save(commit=False)
r.content_object=review_item
r.save()
return super(ReviewCreate, self).form_valid(form)
def get_success_url(self):
item_modelname = self.kwargs.get('model')
item_model = apps.get_model('food',item_modelname)
review_item = get_object_or_404(item_model,pk=self.kwargs.get('pk'))
return reverse( 'pkitem', kwargs = {'pk': review_item.id, 'model':item_modelname},)
get_context_data
应该始终返回上下文字典。使用login_required
修饰符没有意义,因为这意味着它可能会返回重定向响应。在最好改为装饰
dispatch
方法。在dispatch
中,可以设置实例的属性。在然后,在其他方法中,可以访问属性,例如:
^{pr2}$视图是一个对象,所以您只需将值赋给实例变量,即“toself”(this is thread-safe)。像这样:
{{{2>重新初始化cd1}>表单的默认值。可以通过重写
form_valid()
使表单数据保持不变:这将重定向到带有已发布数据的(有界)表单的成功url。表单将添加到上下文中,以便您可以根据需要在模板或视图中使用数据。在
(Django版本1.11.7)
相关问题 更多 >
编程相关推荐