我有一个模特说俱乐部,我们有这样的领域:
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
提出两项请求。我尝试了链函数并使用'| '运营商,但没有工作。我认为经理是单个用户而不是查询集,这就是主要问题。任何解决方法?
答案 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)
应创建所有用户的查询集