下面是我的简化的“ProjectCreate”ClassBasedView:
class ProjectForm(forms.ModelForm):
class Meta:
model = Project
fields = ['name', 'creation_date', 'price']
class ProjectCreate(LoginRequiredMixin, SuccessMessageMixin, CreateView):
model = Project
form_class = ProjectForm
success_message = "Project successfully created"
success_url = "project-list"
def get_form(self, form_class=None):
form = super(ProjectCreate, self).get_form(form_class)
form.fields.pop('creation_date')
return form
def form_valid(self, form):
if form.instance.name == "not_valid_name":
return super().form_invalid(form)
form.instance.last_editor = self.request.user
form.instance.last_modification_date = datetime.datetime.now()
return super().form_valid(form)
我希望仅在名称不是“not_valid_name”时创建项目
如果名称是“not_valid_name”,我希望显示一条错误消息(说明名称无效),并将用户带回到“project create”页面
如果你需要任何额外的信息来了解我的问题,不要犹豫,问我。
谢谢你:)
1条答案
按热度按时间i7uq4tfw1#
您可以在不同级别实现这一点:
Form
级别:here是指向文档中相应页面的链接。简单来说,使用字段name
的clean
方法,下面的代码应该很容易理解:使用此代码(以及模板中的其他几行代码),客户端将看到以下内容:
Model
级别:您可以使用自定义验证器。请查看this page以了解更多信息,它编写得非常好。View
级别,正如您尝试的那样,应该有一种方法,但我认为这不是最好的解决方案,因为将验证逻辑保留在表单和模型字段中更简洁。在编辑Project
示例时,您可能希望在admin
应用中保留相同的约束。如果你更喜欢另一种选择,这是一个提示:this page列出了CreateView
中所有可用且有用的方法。