Django:视图中的模型与方法中的方法

时间:2017-02-27 11:14:38

标签: django python-3.x django-models django-views

我问自己这个问题,models.py和views.py中方法的区别和性能是什么?

示例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*)

我的例子有点简单,但是现实生活与大方法和许多变量的区别是什么?

它对服务器的性能有影响吗?他是否有传统或偏好选择单向?

1 个答案:

答案 0 :(得分:4)

两种方法都错了!

正确的方法是

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

请注意,需要采用此方法来避免竞争条件。您当前的方法需要事务才能使其正常工作。像上面这样的代码通常会进入视图。