我试图列出可能属于多支球队的球员。我设置了我的代码,让用户能够选择多个团队,这是很好的。然而,现在我已经这样做了,自动填充的字段不再工作了。它在外键中工作得很好,但是一旦我将模型字段引用更改为ManyToManyField,我设置的下拉字段的自动填充就不再工作了。请帮帮我!我是个新手,所以如果有更好的方法去完成我想要完成的事情,我愿意接受其他的想法。这是我的代码:
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 = ''上面使用的是团队中的外键字段引用,但当我将其更改为ManyToMany时,该字段现在为空白。我已经尝试将user.userprofile.team更改为user.userprofile.team.all()和user.userprofile.team.all,并继续接收无法解密的错误消息。上面的代码什么也不返回,我仍然得到表单,但是下拉列表是空的。这就好像代码无法从用户的配置文件中解密用户团队一样。我在其他地方签过名,系统采用了团队值,但由于某种原因无法在代码的这一部分中使用它。我试图让它返回多个值,最少一个,但它应该能够返回多个值。任何想法都很感激。
发布于 2017-07-21 19:24:46
原问题的答案是将我的筛选器从qs = Team.objects.filter(user.userprofile.team)更新到qs =Team.objects.filter(user.userprofile.team)到qs=Team.objects.filter(user.userprofile.team)。
发布于 2017-07-21 16:24:45
init()方法,
qs = Team.objects.filter(team__in=user.userprofile.team.all())在将字段更改为ManyToMany关系后,属性就是对象列表。相应地更改您的过滤器。
https://stackoverflow.com/questions/45242396
复制相似问题