Django将两个字段数据组合成一个查询集

时间:2016-06-28 14:04:50

标签: django django-models django-forms

我有一个模特说俱乐部,我们有这样的领域:

manager = models.ForeignKey(Users, related_name="return_manager", on_delete=models.CASCADE)
members = models.ManyToManyField(Users, related_name="return_members", blank=True)

现在我想在一个表单中创建一个下拉列表,我可以在其中添加管理器和成员。我尝试向Club.objects.filter(pk=mypk).members.all()Club.objects.filter(pk=mypk).manager提出两项请求。我尝试了链函数并使用'| '运营商,但没有工作。我认为经理是单个用户而不是查询集,这就是主要问题。任何解决方法?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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)

应创建所有用户的查询集