我想列出可能屬於多個團隊的球員。我爲用戶設置了我的代碼,以便能夠選擇多個團隊,並且工作正常。但是,現在我已經完成了這項工作,自動填充字段不再有效。它與外鍵一起工作良好,但是一旦我將模型字段引用更改爲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,並繼續接收我無法解密的錯誤消息。上面的代碼沒有返回任何結果,我仍然得到表單,但下拉列表是空白的。就好像代碼不能再解析用戶的配置文件一樣。我檢查了其他地方,系統正在考慮團隊價值,但出於某種原因無法在我的代碼的這一部分中使用它。我試圖讓它返回多個值,至少有一個值,但它應該能夠返回多個值。任何想法都表示讚賞。
謝謝你的回覆。不幸的是,當我嘗試我收到以下錯誤消息....「ManyRelatedManager」對象不可迭代。有關於此的任何想法?我再次嘗試在user.userprofile.team的末尾添加.all和(),但它仍然沒有解決問題。 –
在鬼混後,我發現下面這行代碼解決了我的問題:qs = Team.objects.filter(team__in = user.userprofile.team.all())非常感謝您的輸入! ! –