有没有更好的方法将此Python / Django代码格式化为有效的PEP8?

时间:2012-10-27 12:26:11

标签: python django pep8

我有两种方式写的代码,我看到它们都存在缺陷。还有另一种方法来写这个或者一种方法比另一种更“正确”吗?

def functionOne(subscriber):
    try:
        results = MyModelObject.objects.filter(
            project__id=1,
            status=MyModelObject.STATUS.accepted,
            subscriber=subscriber).values_list(
                'project_id',
                flat=True).order_by('-created_on')
    except:
        pass
def functionOne(subscriber):
    try:
        results = MyModelObject.objects.filter(
            project__id=1,
            status=MyModelObject.STATUS.accepted,
            subscriber=subscriber)
        results = results.values_list('project_id', flat=True)
        results = results.order_by('-created_on')
    except:
        pass

这是有效的代码,这是不正确的代码,我翻录了一个类似的代码块,给出了objects.filter部分的一个例子。请不要浪费时间评论代码的其他部分。我把try / except放在那里强制缩进以在新行(80列)上推送某些元素

1 个答案:

答案 0 :(得分:2)

我会这样做:

def functionOne(subscriber):
    try:
        results = MyModelObject.objects.filter(
            project__id=1,
            status=MyModelObject.STATUS.accepted,
            subscriber=subscriber
        ).values_list(
           'project_id',
           flat=True
        ).order_by(
            '-created_on'
        )
    except:
        pass

使用缩进使层次结构更具可读性。但是,这段代码并不是特别好。在视图中直接使用这样的代码应该被视为反模式。对于此类重复代码,模型Manager可能是更好的选择。

您可能需要阅读http://dabapps.com/blog/higher-level-query-api-django-orm/