【发布时间】:2014-02-02 20:43:47
【问题描述】:
我正在尝试将 request.user 放入 ModelForm。我觉得我已经尝试过所有的重载排列方式
__init__
参数(根据Django form, request.post and initial)试图将其作为kwargs 传递(根据Django form __init__() got multiple values for keyword argument)。我
看起来 kwargs 是最好的方法,但我完全被它所阻碍。
这是模型表单:
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})
引发类型错误:init() 获得了意外的关键字参数“用户”。更新方法同样无用:
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,如果有区别的话。
【问题讨论】:
-
在将 kwargs 传递给超级 init 之前,您需要从 kwargs 中“弹出”用户
-
ARRRRGGGGHHHHH!!!! $#HDFA$#@#H#$$!$HF 非常感谢。
标签: django