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

时间:2017-02-06 18:04:39

标签: 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 = TechSupportManager()
    user_manager = UserManagerManager()

好的,问题是冗余的Manager字。我不想删除最后一个字,只需离开" UserManager"没有真正说出那个班级想要做什么,但复制这个词感觉也是错误的事情。

还有更优雅的方法吗?

2 个答案:

答案 0 :(得分:2)

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

IDisposable

使用此示例模型,Person.objects将生成AttributeError异常,但Person.people.all()将提供所有Person对象的列表。

You can find further information on managers, and the best practices using them at this link

答案 1 :(得分:1)

嗯,Manager可以随心所欲地调用。在您的特定情况下,您可以使用managers.py文件(而不是在models.py中使用它们) - 这样做会变得非常明显(并且不那么多余):

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()比较 - 它清楚而明显是什么 - techsupport和user_manager方法不太清楚,这部分是你问题的根源,imo。< / p>