gpt4 book ai didi

python - Django 中基于类的通用 View 的问题

转载 作者:太空狗 更新时间:2023-10-29 17:30:30 26 4
gpt4 key购买 nike

我正在尝试使用基于 Djangos 类的通用 View 编写一个 CRUD 应用程序。以下是我为在数据库中创建新用户而编写的代码。

  from django.views.generic import CreateView
from django.contrib.auth.decorators import login_required
from django.contrib import messages

class UserCreateView(CreateView):
"""
Display and accept a new user to be created in db
"""
form_class = ProfileForm
template_name = 'userdb/profile_form.html'
success_url = '/organization/users/'

def post(self, request, *args, **kwargs):
messages.success(request, "Success", extra_tags='msg')
return super(UserCreateView, self).post(request, *args, **kwargs)

@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(UserCreateView, self).dispatch(*args, **kwargs)

请注意,要添加向用户显示的成功消息,我必须扩展发布功能。我知道这不是执行此操作的好方法,因为调用此函数时尚未确定提交的表单是否包含有效数据。所以我的问题是,是否有推荐的方法将 Djangos 消息传递框架与基于类的通用 View 相结合?

最佳答案

答案取决于您具体希望使用消息传递框架做什么。如果需要为每个 get 请求调用它,您自然需要将它放在 get 方法中(要点是没有一个正确的地方可以放置此代码)。

无论如何,听起来您正在寻找一个仅在表单有效时才触发的地方。

CreateView 使用 ModelFormMixin它实现了一个 form_valid 方法,该方法仅在成功保存表单时触发。完美!

def form_valid(self, form):
messages.success(self.request, "Success", extra_tags='msg')
return super(UserCreateView, self).form_valid(form)
# ModelFormMixin will now save
# FormMixin will now redirect to success_url()
# override above behavior if you need to do something with the object

关于python - Django 中基于类的通用 View 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6420322/

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