2016-06-28 4 views
0

に二つのフィールドのデータを結合するには、我々のようなフィールドがいるクラブを言いますそれに。私はClub.objects.filter(pk=mypk).members.all()Club.objects.filter(pk=mypk).managerの2つのリクエストを試みました。私はチェーン機能を試して、 '| '演算子は動作しませんでした。私はマネージャーが単一のユーザーであり、クエリーセットではないと思います、それが主要な問題です。回避策はありますか?Djangoは私がモデルを持っているクエリセット

答えて

0

すべての情報をまとめて取得するには、form choicesの変更が必要です。

ビューでは、フォームにコンテキストとして選択肢を渡す必要があります。フォームで

def my_view(request, club_pk): 
    context = {} 
    context.update({ 
     "manager": Club.objects.get(pk=club_pk).manager, 
     "members": Club.objects.get(pk=club_pk).members.all() 
    } 
    form = MyForm(request.POST or None, request=request, context=context) 

、あなたはそうのようなあなたの選択肢を更新するために__init__方法を変更する必要があります:

class MyForm(forms.Form): 
    all_club_members = forms.ChoiceField('Manager + Members', required=True) 

    def __init__(self, *args, **kwargs): 
     self.context = kwargs.pop('context', None) 

     super(MyForm, self).__init__(*args, **kwargs) 

     manager_tuple = [(self.context['manager'].id, self.context['manager'].display_name)] 
     members_tuples = [(member.id, member.display_name) for member in self.context['members'] 
     self.fields['all_club_members'].choices = manager_tuple + members_tuples 
0

これを試してみてください:

manager = [Club.objects.filter(pk=mypk).manager] 
members = Club.objects.filter(pk=mypk).members.all() 
userlist = list(manager) + list(members) 
return Users.objects.filter(pk__in=userlist) 

は、すべてのユーザーのクエリセットを作成する必要があります

+0

私はクエリーセットだけを返す必要があります。 get_querysetメソッドをオーバーライドしています。 –

+0

これでユーザのリストが得られました。すべてのユーザIDのクエリセットを 'Users.objects.filter(pk__in = userlist)'を使って返すことができます。http://stackoverflow.com/questions/1058135/django-convert-a -list-to-a-queryset – Written

+0

これはうまくいったのですか? – Written

関連する問題