在django模型上使用classmethod而不是manager是一种好的实践吗?
我目前正在使用Django 1.6 我想知道在模型类上使用class方法而不是manager是否是一个好主意 例如: 现在假设我有一个选项模型,如下所示:在django模型上使用classmethod而不是manager是一种好的实践吗?,django,model,Django,Model,我目前正在使用Django 1.6 我想知道在模型类上使用class方法而不是manager是否是一个好主意 例如: 现在假设我有一个选项模型,如下所示: class Option(models.Model): key = models.CharField(primary_key=True, max_length=100) value = models.TextField() 这些选项被认为是数据库表中的一些键值对 普通,如果我想读取选项,我可以执行: Option.objec
class Option(models.Model):
key = models.CharField(primary_key=True, max_length=100)
value = models.TextField()
这些选项被认为是数据库表中的一些键值对
普通,如果我想读取选项,我可以执行:
Option.objects.get('key').value()
这个语句可能会引发异常,现在我想写一个get方法,它会在异常时自动返回None
如我所知,如果我想用django方式在类上设置一个方法,我们可以定义自己的管理器,很可能如下所示:
Option.my_manager.get('key') # returns the option value or None
但在这里,我可能有另一个选择:classmethod
这是可行的,我们可以用更漂亮的方式来称呼它:
Option.get('key')
所以我想问,一般来说,在django中使用classmethod是一个好的实践吗
如果是这样的话,我们为什么要使用经理呢?我认为这和经理做的事情不一样。管理器通常会改变筛选器的行为,而不是get。@cms\u mgr您可以看到,事实上,使用class方法,我还可以返回queryset,但不仅仅是一个值,然后级联筛选器调用。
Option.get('key')