gpt4 book ai didi

python - Django:在 form.clean() 中返回消息

转载 作者:太空宇宙 更新时间:2023-11-03 20:52:29 24 4
gpt4 key购买 nike

假设我有一个 CreateView,它使用 ModelForm 来添加新的日历事件。有时,在添加新日历事件时,必须在新事件之前添加另一个日历事件才能成功验证新事件(这发生在 ModelForm.clean() 方法中)。我认为可以添加此其他事件的唯一位置是在 clean 方法中,就在验证新事件的验证之前。这是我唯一能做到这一点的地方,对吗?我想让用户知道这是使用 Django 消息发生的,但当然我无权访问 ModelForm 中的请求对象。这让我觉得我必须在另一个地方添加这个事件。 CreateView 的哪种方法适合此目的?

对于我的英语问题以及我的问题措辞不够好,我提前表示歉意。提前致谢。

最佳答案

如果您确实想访问表单中的 request 对象,您可以重写 CreateView 中的 get_form_kwargs 方法(这将在表单的 clean 方法中提供对 self.request 的访问权限):

class YourViewName(CreateView):
def get_form_kwargs(self):
kwargs = super(YourViewName, self).get_form_kwargs()
kwargs.update({'request': self.request})
return kwargs

但是,对于您的场景,最好在 View 中的 form_valid 方法中进行验证。如果验证失败,您可以设置消息,然后调用 form_invalid() 重新渲染带有错误消息的表单。

class YourViewName(CreateView):
def form_valid(self, form):
if not your_check_goes_here():
messages.error(self.request, _("Form is Invalid"))
return self.form_invalid(form)
return super(YourViewName, self).form_valid(form)

关于python - Django:在 form.clean() 中返回消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56225826/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com