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

インデントを使用して、階層を読みやすくします。ただし、このコードはあまり良くありません。このようなコードをビューで直接使用することは、アンチパターンと見なす必要があります。モデルManagers は、そのような繰り返しコードのより良いオプションかもしれません。

http://dabapps.com/blog/higher-level-query-api-django-orm/をお読みください。

于 2012-10-27T12:27:51.490 に答える