Django:返回消息表格.清洁()

2024-04-24 16:19:53 发布

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

假设我有一个CreateView,它使用ModelForm添加一个新的日历事件。有时,在添加新的日历事件时,必须在新事件之前添加另一个日历事件才能成功验证新事件(发生在模型窗体.clean()方法)。我认为唯一可以添加这个其他事件的地方是clean方法,就在验证新事件之前。这是我唯一能做这件事的地方,对吗?我想让用户知道这是使用Django消息发生的,但是我当然不能访问ModelForm中的request对象。这让我觉得我必须在另一个地方加入这个活动。CreateView的哪种方法适合这个目的?你知道吗

我对我的英语很抱歉,如果我的问题措辞不够好的话。提前谢谢。你知道吗


Tags: 对象django方法用户模型目的clean消息
2条回答

如果您不使用ModelForm,而是使用自定义表单,那么您可以更好地控制操作。然后您可以将请求传递给表单,并在清理过程中使用它。你知道吗

以下是我的一个表单的示例,我需要访问该表单以请求保存表单内容:

class RatifyQuestionForm(forms.Form):
    ...
    ...

    def __init__(self, *args, **kwargs): 
        self.request = kwargs.pop('request')
        ....
        ....

    def save(self):
        data = self.cleaned_data
        # create approval record
        ratification = Ratification.objects.create(
                        assessment=data['assessment'],
                        alternative=data['alternative'],
                        author=request.user)

以类似的方式你可以访问自我要求用干净的方法。你知道吗

在视图中实例化窗体,如下所示:

if request.method == 'POST':
    form = RatifyQuestionForm(request.POST, request=request)

如果您真的想访问表单中的request对象,可以重写CreateView中的get_form_kwargs方法(这将提供对自我要求在表单的干净方法中):

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

但是,对于您的场景,最好在视图中的form\u valid方法中进行验证。如果验证失败,可以设置消息,然后调用form\u 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)

相关问题 更多 >