2017-11-30 10 views
0

データベースのクエリを保存するモデルのカウンタを更新しようとしています。ですから、picture_countフィールドを持つ記事モデルがあります。写真は記事とともにm2mです。Django保存前に値を更新する

すべての記事を(Django Adminを使用して)記事に追加または削除するときに、記事picture_countを更新したいと思います。しかし、私はそれについて間違っているようだ。

私は自分の記事モデルのsaveメソッドを単に上書きできると思っていました。しかし、これは機能しません。

def save(self, *args, **kwargs): 
    self.picCount = self.pictures.count() 
    super(Articles, self).save(*args, **kwargs) # Call the "real" save() method. 

問題はm2mがまだ更新されていないことです。私はそれを呼び出した後(再度saveを呼び出す)、オブジェクトは古くなっています。オブジェクトをリフレッシュしてもう一度保存するか、この数を更新する場所がありますか?

+0

あなたはこれをやっていますか?カスタムフォームで?関連する写真レコードの数である整数だけを返すモデルに属性を添付できますか? – drsnark

+0

これは一般的には良い考えではありません。あなたがそれを必要とするとき、例えば集計を介してその数を計算するほうがずっと良いです。データベースはこの種のことに本当に良いです。 –

答えて

0

m2mリレーションを処理しているので、save_relatedメソッドをオーバーライドする必要があります。

Admin.py

def save_related(self, request, form, formsets, change): 
    self.picCount = self.pictures.count() 
    super(Articles, self).save_related(request, form, formsets, change) 

あなたはPythonの3.xを使用している場合は、superコールに何かを渡す必要はありません。

+0

ありがとう、私はスーパーがそれのように単純化されたことに気付かなかった。知っておいてよかった。 –

関連する問題