处理python类/方法命名中冗余单词的优雅方法

处理python类/方法命名中冗余单词的优雅方法,python,django,Python,Django,这个问题很简单,但我正在努力解决 我想为Django模型创建一个自定义对象管理器,如下所示: class Clearance(models.Model): user = models.OneToOneField(User, verbose_name='usuário') level = models.CharField(choices=PERMISSION_LEVELS, max_length=20, verbose_name='nível') tech_support

这个问题很简单,但我正在努力解决

我想为Django模型创建一个自定义对象管理器,如下所示:

class Clearance(models.Model):
    user = models.OneToOneField(User, verbose_name='usuário')
    level = models.CharField(choices=PERMISSION_LEVELS, max_length=20, verbose_name='nível')
    tech_support = TechSupportManager()
    user_manager = UserManagerManager()
from managers import UserManager, TechSupportManager
class Clearance(models.Model):
    user = models.OneToOneField(User, verbose_name='usuário')
    level = models.CharField(choices=PERMISSION_LEVELS, max_length=20, verbose_name='nível')
    tech_support = TechSupportManager()
    user_manager = UserManagerManager()
好的,问题是冗余管理器这个词。我不想删除最后一个单词,只想离开“UserManager”,而不说这个类应该做什么,但是复制这个单词感觉也是错误的


还有更优雅的方法吗?

默认情况下,Django会在每个Django模型类中添加一个名为objects的管理器。但是,如果要将对象用作字段名,或者要为管理器使用对象以外的名称,则可以根据每个模型对其进行重命名。要重命名给定类的管理器,请在该模型上定义models.Manager()类型的类属性。例如:

from django.db import models

class Person(models.Model):
    #...
    people = models.Manager()
使用此示例模型,Person.objects将生成AttributeError异常,但Person.people.all()将提供所有Person对象的列表


好吧,
管理器可以随意调用。在您的特定情况下,您可以使用
managers.py
文件(而不是将它们放在
models.py
中)-这样做会变得非常明显(而且冗余度会降低一点):

class Clearance(models.Model):
    user = models.OneToOneField(User, verbose_name='usuário')
    level = models.CharField(choices=PERMISSION_LEVELS, max_length=20, verbose_name='nível')
    tech_support = TechSupportManager()
    user_manager = UserManagerManager()
from managers import UserManager, TechSupportManager
class Clearance(models.Model):
    user = models.OneToOneField(User, verbose_name='usuário')
    level = models.CharField(choices=PERMISSION_LEVELS, max_length=20, verbose_name='nível')
    tech_support = TechSupportManager()
    user_manager = UserManagerManager()
你的经理档案显然有:

from django.db import models

class TechSupportManager(models.Manager): 
    # your manager methods here
    pass 


class UserManager(models.Manager): 
    # your manager methods here  
    pass 
我要指出的是,这将被称为:

import Clearance

techsupport_results = Clearance.tech_support.all() 
#or whatever methods you define there.   

…这不是最好的调用(与
Clearance.objects.all()相比)
-这很清楚,很明显,技术支持和用户管理方法不太清楚,这部分是你问题的根源,我想。

你为什么决定一开始就这么称呼它?我不确定这个问题是否适合StackOverflow,因为这似乎是一个主观意见的问题。Django不在乎你的想法你可以调用你的类,但是对于models.Manager的子类只使用
FooManager
是一个有用的约定。只要将user_-manger重命名为'user',子类重命名为'UserManager'@HåkenLid我的问题是基于这样一个事实,python有一个非常广泛的关于代码如何使用的建议提示。更像这样。我的意思是,我知道以Manager结尾的类的名称不是强制性的,但这是一个约定。我的问题是,python上的类命名转换我关心的更多的是类名上的冗余,而不是属性中的冗余。我的意思是,即使我将属性重命名为其他名称,按照约定,Manager类名仍将以管理者这个词。所以,如果我想让django管理者在我的项目中处理与are管理者相关的用户,按照惯例,我的django管理者类将是ManagerManager。我知道这很愚蠢,但我只想知道在这种情况下该怎么办。请命名我的类管理者\u管理者或ManagerObjectManager。这是我的问题。