Django 无法使动态python ModelChoiceField工作

Django 无法使动态python ModelChoiceField工作,django,python-3.x,Django,Python 3.x,我是python新手,正在尝试理解如何使动态ModelChoiceField正常工作。当我选择一个对象时效果很好,但是我试图让下拉列表反映用户的属性。这是我的密码: Forms.py class ViewByMake(forms.Form): dropdown = forms.ModelChoiceField(queryset=Make.objects.none()) def __init__(self, user, *args, **kwargs): user = kwarg

我是python新手,正在尝试理解如何使动态ModelChoiceField正常工作。当我选择一个对象时效果很好,但是我试图让下拉列表反映用户的属性。这是我的密码:

Forms.py

class ViewByMake(forms.Form):
    dropdown = forms.ModelChoiceField(queryset=Make.objects.none())

def __init__(self, user, *args, **kwargs):
    user = kwargs.pop('user')
    super(ViewByMake, self).__init__(*args, **kwargs)
    qs = Make.objects.filter(user=user)
    self.fields['dropdown'].queryset = qs
    self.fields['dropdown'].widget.attrs['class'] = 'choices1'
    self.fields['dropdown'].empty_label = ''
Views.py

def view_bymake(request):
form = ViewByMake(request.POST or None, user=request.user)
if request.method == 'POST':
    if form.is_valid():
        make = form.cleaned_data['dropdown']   
        return HttpResponseRedirect(make.get_absolute_url1())
return render(request,'make/view_make.html',{'form':form})
如果我删除所有user=引用,但只返回完整的makeobjects列表,这段代码就可以正常工作,这不是我想要的。我在StackOverflow上发现了一个非常类似的问题,但是当我以相同的方式复制代码时,它仍然不起作用,并且它给了我以下错误:

init为参数“user”获取了多个值

我在互联网的尽头搜索了这个话题。如果我做得不好,我愿意接受其他想法。我试图根据与用户配置文件相关联的标准,基本上获得一个过滤列表。我肯定需要下拉字段,以特定于用户的配置文件设置的基础上。提前谢谢你的帮助。我正在运行django 1.11.2和Python 3.6.1

这是更新后的模型,需要包括用户属性,我没有意识到我必须指定:

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

尝试使用request,从表单发送请求,并在表单的init方法中获取请求

views.py

def view_bymake(request):
    form = ViewByMake(request.POST or None, request=request)
forms.py

def __init__(self, user, *args, **kwargs):
    self.request = kwargs.pop('request', None)
    super(ViewByMake, self).__init__(*args, **kwargs)
    qs = Make.objects.filter(user=self.request.user)
    self.fields['dropdown'].queryset = qs
    self.fields['dropdown'].widget.attrs['class'] = 'choices1'
    self.fields['dropdown'].empty_label = ''

我最初的问题“如何让user=user工作”的答案包括确保表单、视图和模型中的所有引用用户。我最初在视图中有用户引用,并且表单是正确的,但是我忽略了确保在我引用的模型上指定了user=。我以为它是内置的,但事实证明你必须在你的模型上特别引用它。我是新手,所以这是一次学习经历。进入下一个挑战

能否删除初始化定义中的用户参数并重试?我认为在调用中有两次user:首先它将得到user=request.Post,然后是user=request。user@NeErAjKuMaR我尝试了您的建议,收到了以下错误:无法将关键字“user”解析到字段。@ger.s.brett我在发布之前尝试过,但再次尝试,无法将关键字“user”解析到字段中。但这是一个错误不同的问题:您的模型是否有现场用户?你能发布模型吗?@ger.s.brett你是对的。我在Make字段中找不到用户。我已经添加了它,现在它正在工作。谢谢你的贡献。为了其他原因,我已经发布了模型代码。但是,现在我已经可以使用了,我正在尝试了解这个功能是否仅限于用户,或者您是否也可以利用用户配置文件上的其他属性?我刚开始玩语法,到目前为止还没有任何运气。