我正在尝试将request.user放入ModelForm。我觉得我已经尝试过通过重载来进行所有排列
__init__
参数(按Django形式,request.post和initial)尝试将其作为kwargs传递(按Django形式__init __()获得关键字arguments的多个值)。一世
看来,kwargs是最好的方法,但是我完全受制于它。
这是ModelForm:
class DistListForm(ModelForm):
members = ModelMultipleChoiceField(queryset=Company.objects.none())
class Meta:
model = DistList
fields = ['name', 'description', 'members', 'is_private']
def __init__(self, *args, **kwargs):
super(DistListForm, self).__init__(*args, **kwargs)
user = kwargs.pop('user', None)
up = UserProfile.objects.get(user=user)
/.. etc ../
以下是create函数当前的工作方式:
def distlistcreate(request):
user = {'user': request.user}
form = DistListForm(**user)
if request.method == 'POST':
form = DistListForm(request.POST)
if form.is_valid():
distlist = form.save(commit=False)
distlist.creator = request.user
distlist.save()
form.save_m2m()
return HttpResponseRedirect(reverse('distlistsmy'))
return render(request, 'distlistcreate.html',{'form':form})
抛出TypeError的错误:init()获得了意外的关键字参数'user'。更新方法同样无济于事:
def distlistupdate(request, object_id):
distlist = get_object_or_404(DistList, id=object_id)
form = DistListForm(user=request.user, instance=distlist)
if request.method == 'POST':
form = DistListForm(request.POST, user=request.user)
它还会引发相同的错误。
我已经把头撞在这堵墙上两个小时了。将关键字参数传递到ModelForm的正确方法是什么?
如果这有所不同,则为Django 1.6.1。
您必须在调用super()之前弹出用户参数,这样就不会与ModelForm的默认参数冲突。
class DistListForm(ModelForm):
members = ModelMultipleChoiceField(queryset=Company.objects.none())
class Meta:
model = DistList
fields = ['name', 'description', 'members', 'is_private']
def __init__(self, *args, **kwargs):
user = kwargs.pop('user', None)
super(DistListForm, self).__init__(*args, **kwargs)
user_profile = UserProfile.objects.get(user=user)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句