有条件地覆盖模型Django admin成功保存的消息



我重写了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

最新更新