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

2024-04-16 08:25:45 发布

您现在位置:Python中文网/ 问答频道 /正文

这个问题很简单,但我正在努力解决。你知道吗

我想为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()

好吧,问题是冗余管理器这个词。我不想去掉最后一个词,只留下“UserManager”,而不说这个类应该做什么,但是复制这个词感觉也是错误的。你知道吗

有没有更优雅的方法?你知道吗


Tags: 对象djangoname模型管理器verbosemodelmodels
2条回答

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

from django.db import models

class Person(models.Model):
    #...
    people = models.Manager()

使用这个示例模型,个人.对象将生成AttributeError异常,但是个人。个人。所有人()将提供所有Person对象的列表。你知道吗

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

好吧,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\u manager方法不太清楚,这在一定程度上是您问题的根源,imo

相关问题 更多 >