1

Django モデルで save メソッドをオーバーライドしています。モデルを保存しない場合があります。これらの場合、「引用 1111 が正常に追加されました」を条件付きでオーバーライドする方法を理解できないようです。管理リスト インターフェイスに戻った後に表示されるメッセージ (エントリ フォーム インターフェイスとは対照的に)。

4

1 に答える 1

1

saveDjango の管理インターフェースがモデル フォームとメッセージ フレームワークを使用するのをオーバーライドするだけでは、それをオーバーライドできないと思います。

I think something like this happens, it's more complicated than this but more or less:

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 admin uses model forms, so this is an example)

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!.')

Now regardless of what form.save() actually did the message is still sent out anyway, we have no way of knowing if you saved or not in your overridden save method and this is probably whats happening in the django admin system.

An alternative would be to create a custom model form for the admin to use for this model and define a custom validation method, so the form doesn't validates unless foo == bar. Or you could override the save method on the form, you'll need to have a look around the django admin code, it probably is possible, just a bit trixy :p

于 2013-03-27T21:46:06.273 に答える