【发布时间】:2014-09-22 11:30:11
【问题描述】:
需要 Django 模型 save() 方法的帮助。 如果我的模型 save() 方法中的某些条件为假,我需要重定向回人员列表页面或人员表单。 目前我使用了验证错误,但我正在寻找重定向回列表页面或表单。如果我使用 return 语句,总是会成功添加而不保存。 这里我需要一个重定向而不是“raise ValidationError(u"Enter a valid name")。
提前致谢 贾斯汀
#Models.py
from django.db import models
from django.core.exceptions import ValidationError
class Person(models.Model):
first_name = models.CharField(max_length=30, blank=True)
last_name = models.CharField(max_length=30, blank=True)
address = models.TextField(max_length=300, blank=True)
def save(self, *args, **kwargs):
if self.first_name == "": #(Some condition check, not a simple field value )
raise ValidationError(u"Enter a valid name")
# Need a redirection back to Django Admin Persons list page or to Add Person Page with error message
# But always showing added successfully, if i use a return or redirection.
else:
super(Person,self).save(*args, **kwargs)
#admin.py
from django.contrib import admin
from testapp.models import Person
from testapp.forms import PersonAdminForm
from django.contrib import messages
# Register your models here.
class PersonAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name')
#form = PersonAdminForm
#def save_model(self, request, obj, form, change):
# obj.user = request.user
# obj.save()
# messages.add_message(request, messages.INFO, 'Text of message')
admin.site.register(Person, PersonAdmin)
#forms.py
from testapp.models import Person
from django import forms
class PersonAdminForm(forms.ModelForm):
class Meta:
model = Person
感谢朋友的回复, 我在这里添加了我的实际模型类。实际上我没有使用任何自定义表单或自定义验证。我只使用了 django 管理界面。但是我在模型类中添加了一个自定义 save() 方法。在那个 save() 方法中,我在编辑和添加案例时做了一些条件。 使用 save() 方法正确添加数据和编辑数据。但是条件错误的情况下我们没有选项重定向回管理模型类列表或带有错误消息的管理表单? 在我的示例中,我可以使用任何其他代码而不是 raise ValidationError("error test message")?。 raise ValidationError 给出 django 错误页面。如果我使用重定向或返回,则在不保存数据时也会给出“...添加成功”消息。
有机会吗?
我的代码...
class Asset(models.Model):
-----code--------
class Meta:
verbose_name_plural= "Employees Assets"
def save(self, *args, **kwargs):
----- code------
if self.pk is not None:
++++++++++ some code +++++++++++
if self.hardware.hardware_status == 0 and edit_flag == 2:
++++++++++ some code +++++++++++
elif self.hardware.hardware_status == 1 and edit_flag == 1:
++++++++++ some code +++++++++++
elif (self.hardware.hardware_status == 0 or self.hardware.hardware_status == -1) and edit_flag == 1:
++++++++++ some code +++++++++++
elif self.hardware.hardware_status == -1 and edit_flag == 2:
raise ValidationError('Cant modify Hardware, Hardware status is Lost ')
else:
raise ValidationError('Cant modify Hardware, Hardware already assigned to other staff')
self.hardware.save()
super(Asset, self).save(*args, **kwargs)
else:
if self.hardware.hardware_status == 0:
++++++++++ some code +++++++++++
else:
raise ValidationError(u'Can't assign, Hardware not available(Lost/Alreday Assigned) for assignment')
self.hardware.save()
super(Asset, self).save(*args, **kwargs)
def __unicode__(self):
return u'%s Hardware information for %s' % (self.hardware, self.employee)
【问题讨论】:
标签: django django-models