Django很多很多场让我悲伤

时间:2017-07-21 16:19:23

标签: django python-3.x django-models django-forms django-views

我正在尝试列出可能属于多个团队的玩家。我为用户设置了我的代码,以便能够选择多个团队,而且工作正常。但是,现在我已经这样做了,字段的自动填充不再有效。它使用外键工作正常但是一旦我将模型字段引用更改为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 = ''

上面的内容适用于团队中的foreignkey字段引用,但当我将其更改为ManyToMany时,该字段现在为空。我已经尝试将user.userprofile.team更改为user.userprofile.team.all()和user.userprofile.team.all并继续接收我无法解密的错误消息。上面的代码没有返回任何内容,我仍然得到表单,但下拉列表是空白的。好像代码无法再从其个人资料中解密用户团队。我已在其他地方检查过,系统正在考虑团队价值,但出于某种原因无法在我的代码的这一部分中使用它。我试图让它返回多个值,最少至少一个,但它应该能够返回多个值。任何想法都表示赞赏。

2 个答案:

答案 0 :(得分:1)

在表单中更改此行。 init ()方法,

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

在您将字段更改为ManyToMany关系后,该属性是对象列表。相应地更改过滤器。

答案 1 :(得分:0)

回答从foreignkey到manytomany更改字段后要更改的内容的原始问题是将我的过滤器从qs = Team.objects.filter(user.userprofile.team)更新为qs = Team.objects.filter(team__in = user.userprofile.team.all())。