首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >许多给我带来悲伤的地方

许多给我带来悲伤的地方
EN

Stack Overflow用户
提问于 2017-07-21 16:19:23
回答 2查看 71关注 0票数 0

我试图列出可能属于多支球队的球员。我设置了我的代码,让用户能够选择多个团队,这是很好的。然而,现在我已经这样做了,自动填充的字段不再工作了。它在外键中工作得很好,但是一旦我将模型字段引用更改为ManyToManyField,我设置的下拉字段的自动填充就不再工作了。请帮帮我!我是个新手,所以如果有更好的方法去完成我想要完成的事情,我愿意接受其他的想法。这是我的代码:

代码语言:javascript
复制
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,并继续接收无法解密的错误消息。上面的代码什么也不返回,我仍然得到表单,但是下拉列表是空的。这就好像代码无法从用户的配置文件中解密用户团队一样。我在其他地方签过名,系统采用了团队值,但由于某种原因无法在代码的这一部分中使用它。我试图让它返回多个值,最少一个,但它应该能够返回多个值。任何想法都很感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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)。

票数 0
EN

Stack Overflow用户

发布于 2017-07-21 16:24:45

init()方法,

代码语言:javascript
复制
qs = Team.objects.filter(team__in=user.userprofile.team.all())

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45242396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档