2017-02-27 10 views
2

私は自分自身にこの質問をしましたが、違いは何ですか?また、models.pyとviews.pyのメソッドの間にはどのような違いがありますか?Django:モデルのメソッドとビューのメソッド

例1:

models.py:

class Counter(models.Model): 
    number = models.PositiveSmallIntegerField(default=0) 

    def add_one(self): 
     self.number += 1 
     self.save() 

views.py

from *xxx* import Counter 

def count(request): 
    c = Counter() 
    c.add_one() 
    c.save() 
    return render(request, *xxx*) 

例2:

models.py:

class Counter(models.Model): 
    number = models.PositiveSmallIntegerField(default=0) 

views.py

from *xxx* import Counter 

def add_one(nb): 
    nb += 1 
    return nb 

def count(request): 
    c = Counter() 
    c.number = add_one(c.number) 
    return render(request, *xxx*) 

私の例では、少し簡単ですが、どのような大きな方法と実際の生活の中で違いと非常に多くの変数?

ITSは、サーバーのパフォーマンスに影響がありますか?彼は慣習的か、どちらかを選ぶ選好を持っていましたか?

+1

なぜ任意のパフォーマンスの違いはありますでしょうか?コードはどこに置いてもコードです。あなたはそれをデータベースに保存することはありませんので、 –

+1

もう一つは[こちら](https://docs.djangoproject.com/en/1.10/topics、彼らはあなたが読むことができるまったく同じ事を – Sayse

+0

行うこと以外にはるかに高速になります/ performance /#get-things-from-the-start)あなたは異なる可能性があり、それはフレームワーク上でdifferenteレベルで作業することです。そして私は自分のコードを最適化する良い方法を見つけようとしています。 – Buky

答えて

4

両方のアプローチは間違っています!

正しい方法は、このアプローチは、競合状態を避けるために必要とされていることを

Counter.objects.filter(pk=some_id).update(number=F('number')+1) 

注意です。現在のアプローチでは、適切に動作させるためにトランザクションが必要になります。上記のようなコードが一般的に表示されます。

+0

答えをありがとう、しかし、インクリメントは簡単な例でしたが、実際には、データベースに保存する前に、多くの処理をユーザーの入力に入れて繰り返しています。だから私は更新が良いことを知っているが、私は非常に簡単な例を見つける。 – Buky

+0

"はい"と答えると、私の例に答えます。しかし、質問はちょうど という理論的なものでした。「viewsとmodels.pyとviews.pyの違いとは何ですか?」と私が理解していると、ビューのアプローチがより良いと分かります。 – Buky

+0

まだあなたのコメントは両方とも無関係です。あなたが投稿したコードは単にそれを行うための間違った方法です。別の質問を投稿することをお勧めします。お読みください: http://stackoverflow.com/help/how-to-ask – e4c5

関連する問題