【问题标题】:Django custom model class functions- .save()Django 自定义模型类函数 - .save()
【发布时间】:2017-09-28 12:22:25
【问题描述】:

您能否在 Django 模型中定义一个将使用 .save() 函数的函数。

Class Restaurant(models.Model)
    name = models.CharField(max_length=25)
    rating = models.PositiveIntegerField(validators=[MaxValueValidator(100), MinValueValidator(0)], default=50)

    def change_rating(self, value)
        self.rating += value
        self.rating.save()

这行得通吗?这是最佳做法吗?

在这样的视图中完成此操作是否更好:

*views.py

def change_rating(name, amount):
  res = Restaurant.objects.get(name=name)
  res.rating += amount
  res.save()

感谢您的帮助!

【问题讨论】:

  • 你试过了吗?你有什么理由认为这不是一个好的做法?
  • 我的编程技能处于“我可以让它工作”的水平。我很好奇是否有一些我不知道的东西会使另一种实现这一目标的方法成为更好的选择。真的,我只是在寻找意见和想法。

标签: django views models


【解决方案1】:

我会建议这种情况下的模型管理器

model_managers.py

from django.db import models

class CustomManager(models.Manager):

    def change_rating(self, value, **kwargs):
        x = self.get(**kwargs)
        x.rating += value
        x.save()

models.py

from . model_managers import CustomManager

class Restaurant(models.Model):
    name = models.CharField(max_length=25)
    rating = models.PositiveIntegerField(validators=[MaxValueValidator(100), MinValueValidator(0)], default=50)
    objects = CustomManager()

    def __unicode__(self):
        return self.name

执行命令

Restaurant.objects.change_rating(25, name=name)

【讨论】:

  • 这似乎是对管理器的毫无意义的使用,它们用于级别的操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
  • 2010-12-18
  • 2012-05-19
  • 2016-01-09
  • 2022-11-05
相关资源
最近更新 更多