Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在django模型上使用classmethod而不是manager是一种好的实践吗?_Django_Model - Fatal编程技术网

在django模型上使用classmethod而不是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

我目前正在使用Django 1.6

我想知道在模型类上使用class方法而不是manager是否是一个好主意

例如:

现在假设我有一个选项模型,如下所示:

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')