1

我正在覆盖 Django 模型上的保存方法。在某些情况下,我不保存模型。在这些情况下,我似乎无法弄清楚如何有条件地覆盖“引文 1111 已成功添加”。返回到管理列表界面(与输入表单界面相反)后显示的消息。

4

1 回答 1

1

我认为您不能仅通过覆盖saveDjango 的管理界面使用模型表单和消息框架来覆盖它。

我认为会发生这样的事情,它比这更复杂,但或多或​​少:

模型.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

视图.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,否则该表单不会验证。或者您可以覆盖表单上的保存方法,您需要查看 django 管理代码,这可能是可能的,只是有点棘手:p

于 2013-03-27T21:46:06.273 回答