我重写了Django模型上的save方法。在某些情况下,我不保存模型。在这些情况下,我似乎无法弄清楚如何有条件地覆盖返回到管理列表界面(而不是输入表单界面)后显示的"引文1111已成功添加"消息。
我不认为你可以仅仅通过重写save
来重写Django的管理界面使用模型表单和消息框架。
我认为类似这样的事情发生了,它比这个更复杂,但或多或少:
models.py
class MyModel(models.Model):
foo = models.CharField(...)
bar = models.CharField(...)
def save(self, *args, **kwargs):
if self.foo == self.bar: # We only save if foo == bar
super(MyModel, self).save(*args, **kwargs)
forms.py (Django管理员使用模型表单,所以这是一个例子)
class MyModelForm(ModelForm):
class Meta:
model = MyModel
views.py
def save(request):
if request.method == 'POST':
form = MyModelForm(request.POST)
if form.is_valid():
form.save()
messages.success(request, 'MyModel was saved!.')
现在,不管form.save()实际上做了什么,消息仍然被发送出去,我们无法知道你是否在你的重写的保存方法中保存,这可能是django管理系统中发生的事情。
另一种方法是创建一个自定义模型表单供管理员使用,并定义一个自定义验证方法,这样除非foo == bar,否则表单不会进行验证。或者你可以重写表单上的save方法,你需要看一下django管理代码,这可能是可能的,只是有点复杂:p