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

4

1 回答 1

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

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

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

于 2012-10-27T12:27:51.490 回答