2017-09-21 10 views
0

問題があります。 検索された式を保存し、直後にその数を増やしたい。 私はget_or_createメソッドを使用しますが、毎回エラーが発生します。Django get_or_createとすぐに増加する

models.py

class TopSearch(models.Model): 
    expression = models.CharField(max_length=255) 
    count = models.IntegerField(default=0) 

と私ははこのやりたい:、

  1. 検索式が存在する場合には、それ以外の場合は1
  2. することにより、そのカウントをインクリメントそれとimmidietlyインクリメントを作成しますその数を1だけカウントします。

君は !

答えて

0

あなたがこれを行うことができます:

obj, created = TopSearch.objects.get_or_create(expression=something) 
obj.count += 1 
obj.save() 

取得またはオブジェクトとブール値を返す作成:取得する場合はFalse、Trueを作成した場合。

2

たぶん、このようないくつかの事はするだろう、@Melvyn

from django.db.models import F 

obj, created = TopSearch.objects.get_or_create(expression=something, defaults={'count': 1}) 
if created: 
    obj.count = F('count') + 1 
    obj.save() 
+0

からの提案の後、私は 'OBJ、作成= TopSearch.objects.get_or_create(表現=何か)で' created'は 'どのようにそれが何であるかをwondertingました作品が – Srinivas

+1

作成された場合は、カウント= 1です。それはカウント=カウント+ 1ではないので、保存する必要があります。これを最適化するには、get_or_create()に 'defaults = {'count':1}'を追加し、残りのコードに対して 'if created:'を追加します(update_field = ['counts']をifテーブルが列を伸ばす)。 – Melvyn

+0

私は同意すると、デフォルトを追加すると良い最適化であり、プラスコードが読みやすくなります。 – zaidfazil

関連する問題