2017-09-05 4 views
0

私は、あるユーザーが作成してAPIに表示するオブジェクトを取得しようとしていますが、このユーザーがこのオブジェクトを宣言する必要があります。 order_by( 'created_by')を使用する場合、クエリーセットはユーザーのID(必ずしも必要なIDではなく、降順)である必要があります。最初の結果は、ユーザーが作成したOpportunityでなければなりません。ユーザーによるdjangoの照会

私はこれが解決できると思っていたが、qは、労働組合とのordenationを失った:

def get_queryset(self): 
    user = self.request.user 
    q_all = Opportunity.objects.all().exclude(created_by=user.id) 
    q_user = Opportunity.objects.filter(created_by=user.id).exclude(archived=True) 
    q = q_user | q_all 
    return q 
+0

ユーザー名で注文したいですか? –

+0

名前またはIDである可能性があります。私は単にクエリーセットの他のものよりユーザーの機会を最初に表示したいだけです。 – fasolo

答えて

2

あなたはQuerySetをソートする鍵方式でsortedを使用することができます。

ソリューション

def sort_by_auth_user(self, item): 
    if item.created_by == self.request.user: 
     return -1 
    else: 
     return 1 

def get_queryset(self): 
    opp_qs = Opportunity.objects.all() 
    sorted_opp_qs = sorted(opp_qs, key=self.sort_by_auth_user) 
    return sorted_opp_qs 

sorted方法では、独自のカスタムニーズによってソートする方法を渡すことが可能なリストとオプションの引数keyをとります。

item.created_byが認証されたユーザーであるかどうかを確認するためにカスタムメソッドを使用しましたが、-1が返されました。これは、認証されたユーザーによって作成されない他のアイテムの値よりも小さい値です。

+0

ありがとう、それは私が必要とするものです – fasolo

関連する問題