Django:POST和GET表单验证错误的不同视图

2024-10-01 22:26:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个DemandDetailView(DetailView)BidCreationView(CreateView)

DemandDetailView页面上,有一个表单(用于创建出价)将数据发布到BidCreationView

我不知道万一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)

你有什么想法吗?我唯一的想法是使用session,这可能不是最好的方法。


Tags: selfformgetreturnrequestdefcontextkwargs
1条回答
网友
1楼 · 发布于 2024-10-01 22:26:19

可以从窗体对象中使用is_valid()方法。比如:

class DemandDetailView(DetailView):
    model = Demand
    template_name = 'demands/detail.html'


def dispatch(self, request, *args, **kwargs):
    form = BidCreationForm(request.POST or None, request.FILES or None,request=request)
    if form.is_valid():
         self.bid_creation_form = form
    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

选项2(个人选择):

在表单.py在

^{pr2}$

看看表单中的元类。它显式地调用Bid模型和fields属性引用模型实例中的Bid字段。现在您可以在任何视图中调用此窗体,而无需调用另一个视图。如果你想给这个表单添加逻辑,比如计算总金额或者类似的东西,那么也应该在表单中这样做。写一次代码,不要重复你自己。在

相关问题 更多 >

    热门问题