我有一个DemandDetailView(DetailView)
和BidCreationView(CreateView)
。
在DemandDetailView
页面上,有一个表单(用于创建出价)将数据发布到BidCreationView
。
我不知道万一 你有什么想法吗?我唯一的想法是使用session,这可能不是最好的方法。form
无效该怎么办。{{cd7>将再次使用class DemandDetailView(DetailView):
model = Demand
template_name = 'demands/detail.html'
def dispatch(self, request, *args, **kwargs):
self.bid_creation_form = BidCreationForm(request.POST or None, request.FILES or None,request=request)
return super().dispatch(request, *args, **kwargs)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['bid_creation_form']=self.bid_creation_form
return context
class BidCreationView(CreateView):
http_method_names = ['post']
model = Bid
form_class = BidCreationForm
def get_success_url(self):
return reverse_lazy("demands:demands")
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs.update({'request': self.request})
return kwargs
def form_valid(self, form):
form.instance.demand_id = self.kwargs.pop('demand_id')
return super().form_valid(form)
可以从窗体对象中使用is_valid()方法。比如:
选项2(个人选择):
在表单.py在
^{pr2}$看看表单中的元类。它显式地调用Bid模型和fields属性引用模型实例中的Bid字段。现在您可以在任何视图中调用此窗体,而无需调用另一个视图。如果你想给这个表单添加逻辑,比如计算总金额或者类似的东西,那么也应该在表单中这样做。写一次代码,不要重复你自己。在
相关问题 更多 >
编程相关推荐