2017-09-25 74 views
0

我很难找到使其工作的方法; 我需要使用由当前登录用户创建的团队列表来获取查询集。当请求未定义时,获取已登录的用户

我看形式如下:

from django import forms 
from django.contrib.auth.models import User 
from registration.models import MyUser 
from .models import Project, Team 
from django.contrib.auth import get_user_model 

User = get_user_model() 



class EditSelectTeam(forms.Form): 

    team_choice = forms.ModelChoiceField(widget=forms.RadioSelect, queryset=Team.objects.all().filter(team_hr_admin=request.User)) 
    #team_id = forms.ChoiceField(queryset = Team.objects.filter(team_hr_admin= MyUser)) 

    def team_select(self): 
     data = self.cleaned_data['team_choice'] 
     return data 

views.py:

def TeamSelect(request): 
    if request.method == "POST": 
     select_form = EditSelectTeam(request.POST) 
     print('sucess') 

    else: 
     select_form = EditSelectTeam(request) 
    return render(request,'link_project.html', 
          {'select_form':select_form }) 

我得到的错误是请求没有定义

+0

[创建动态选择字段]的可能的复制(https://stackoverflow.com/questions/3419997/creating-a-dynamic-choice-field ) – georgeofallages

+0

我吮吸使用SO,但我认为你可以在其他问题中找到你的答案。你可以重写你的EditSelectTeam构造函数以将用户存储为team_choice过滤吗? – georgeofallages

回答

0

你可以通过使用初始化请求方法如:

class EditSelectTeam(forms.Form): 

    team_choice = forms.ModelChoiceField(widget=forms.RadioSelect, queryset=None) 

    def __init__(self, request, *args, **kwargs): 
     super(EditSelecTeam, self).__init__(*args, **kwargs) 
     self.fields['team_choice'].queryset = Team.objects.all().filter(team_hr_admin=request.User)) 

    def team_select(self): 
     data = self.cleaned_data['team_choice'] 
     return data 

记住传递到自己的形式,如要求:

form = your_form(request) 
+0

嗨Mauricio thx为您的答案。现在,当我在我的表单中尝试POST时,它说QueryDict的对象没有属性'user'。我用视图更新了我的问题。任何想法 ? – Ben2pop

+0

select_form = EditSelectTeam(request,request.POST试一下,告诉我 –

+0

该过滤器正在工作? –

相关问题