2017-07-21 53 views
0

我想列出可能屬於多個團隊的球員。我爲用戶設置了我的代碼,以便能夠選擇多個團隊,並且工作正常。但是,現在我已經完成了這項工作,自動填充字段不再有效。它與外鍵一起工作良好,但是一旦我將模型字段引用更改爲ManyToManyField,我設置的下拉字段的自動填充不再有效。請幫忙!我是一個新手,所以如果有更好的方法去實現我想要完成的任務,我願意接受其他想法。這裏是我的代碼:Django多到很多場造成我的悲傷

Models.Py 

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    users = User.objects.select_related('userprofile').all()   
    team = models.ManyToManyField(Team,related_name='teamprofile') 

    def __str__(self): 
     return self.user.get_full_name() 

class Team(models.Model): 
    team = models.CharField(max_length=264,unique=True) 
    user = models.ForeignKey(User,null=True,on_delete=models.CASCADE) 

    class Meta: 
     ordering = ["team"] 

    def __str__(self): 
     return self.team 

Views.Py 

def view_byteam(request): 
    form = ViewByTeam(request.user, request.POST or None) 
    if request.method == 'POST': 
     if form.is_valid(): 
      department = form.cleaned_data['dropdown'] 
      return HttpResponseRedirect(team.get_absolute_url1()) 
    return render(request,'/view_byteam.html',{'form':form}) 

Forms.py 

class ViewByTeam(forms.Form): 

    dropdown = forms.ModelChoiceField(queryset=Team.objects.none()) 

    def __init__(self, user,*args, **kwargs): 
    super(ViewByTeam, self).__init__(*args, **kwargs) 
    qs = Team.objects.filter(team=user.userprofile.team) 
     self.fields['dropdown'].queryset = qs 
     self.fields['dropdown'].widget.attrs['class'] = 'choices1' 
     self.fields['dropdown'].empty_label = '' 

上述工作與團隊外鍵字段引用,但是當我將其更改爲多對多,本場是當前空白。我已經嘗試將user.userprofile.team更改爲user.userprofile.team.all()和user.userprofile.team.all,並繼續接收我無法解密的錯誤消息。上面的代碼沒有返回任何結果,我仍然得到表單,但下拉列表是空白的。就好像代碼不能再解析用戶的配置文件一樣。我檢查了其他地方,系統正在考慮團隊價值,但出於某種原因無法在我的代碼的這一部分中使用它。我試圖讓它返回多個值,至少有一個值,但它應該能夠返回多個值。任何想法都表示讚賞。

回答

0

回答從foreignkey到manytomany更改字段後要更改的原始問題是將我的過濾器從qs = Team.objects.filter(user.userprofile.team)更新爲qs = Team.objects.filter(team__in = user.userprofile.team.all())。

1

在表單中更改此行。 初始化()方法,

qs = Team.objects.filter(team__in=user.userprofile.team.all()) 

你已經改變了外地ManyToMany關係後,屬性是對象的列表。相應地更改你的過濾器

+0

謝謝你的回覆。不幸的是,當我嘗試我收到以下錯誤消息....「ManyRelatedManager」對象不可迭代。有關於此的任何想法?我再次嘗試在user.userprofile.team的末尾添加.all和(),但它仍然沒有解決問題。 –

+0

在鬼混後,我發現下面這行代碼解決了我的問題:qs = Team.objects.filter(team__in = user.userprofile.team.all())非常感謝您的輸入! ! –