如何在Django CreateView&中呈现Form实例更新视图?

时间:2016-08-25 10:11:25

标签: python django

我试图将我的代码重构为基于类的视图,并且我无法理解如何在最后返回/渲染。我尝试使用提供的POST数据在成功(或失败)时使用适当的确认消息呈现表单,以便可以更新它。这是一些示例代码,评论显示了我想要返回的内容(我不知道如何):

"0.166667 0.166667 0.166667 0.166667 0.166667 0.166667 "

1 个答案:

答案 0 :(得分:1)

你不应该在那里做任何事情。如果验证失败,视图已经负责调用验证方法并重新显示表单;仅当表单已有效时才会调用form_valid。您的用户检查应该进入表单本身:

class ProductCreateForm(forms.ModelForm):
    ...
    def clean_user_email(self):
        user = User.objects.filter(username=self.cleaned_data['user_email']).first()
        if user is None:
            raise forms.ValidationError("Invalid user email specified")
        return user

对于第二部分,重定向到更新视图,您可以通过定义get_success_url方法来实现;它返回的内容取决于您为ProductUpdate视图定义的URL,但假设URL采用id参数,它将是这样的:

class ProductCreate(CreateView):
    def get_success_url(self):
        return reverse('product_update', kwargs={'id': self.instance.pk})

这使得form_valid方法只需要将消息设置为成功,如果您使用contrib.messages中的SuccessMessageMixin,则甚至不需要这样做。