我有一个带有modelchoice字段的FormModel。模型选择小部件基于已记录的用户
进行过滤class ProcFTPForm(forms.ModelForm):
#id_archivo = forms.ModelMultipleChoiceField(queryset=Archivo_Descarga.objects.all(),required=True,widget=FilteredSelectMultiple("Archivo",is_stacked=False),label='')
class Media:
css = {'all':('/admin/css/widgets.css',),}
js = ('/admin/jsi18n/','admin/jquery.js')
def __init__(self,usuario, *args, **kwargs):
super(ProcFTPForm, self).__init__(*args, **kwargs)
self.fields['id_archivo'] = forms.ModelMultipleChoiceField(queryset=Archivo_Descarga.objects.filter(usuario=usuario),required=True,widget=FilteredSelectMultiple("Archivo",is_stacked=False),label='')
class Meta:
model = Lista_Archivos
我的观点
@login_required(login_url='/login/')
def archivoview(request):
usuario = request.user
form = ProcFTPForm(request.POST or usuario )
if request.method == 'POST':
form = ProcFTPForm(request.POST)
if form.is_valid():
form.save()
proc = Lista_Final()
lista = proc.archivos()
tabla = Proc_Carga()
sp = tabla.carga()
return HttpResponseRedirect('/home/')
return render_to_response('archivo.html',{'form':form},context_instance=RequestContext(request))
此时一切正常。 FilteredSelectMultiple小部件仅显示基于已记录用户的选项 但现在我无法拯救。当我单击“保存”按钮时,窗口小部件将被清空,并且不会保存记录。
如果我改变了表格:
forms.ModelMultipleChoiceField(queryset=Archivo_Descarga.objects.filter(usuario=usuario),required=True,widget=FilteredSelectMultiple("Archivo",is_stacked=False),label='')
到此:
forms.ModelMultipleChoiceField(queryset=Archivo_Descarga.objects.all(),required=True,widget=FilteredSelectMultiple("Archivo",is_stacked=False),label='')
表单工作正常,并保存FilteredSelectMultiple小部件中的所有记录。
我不知道错误在哪里,或者我错过了什么。
任何建议
提前致谢
答案 0 :(得分:0)
您已将__init__
方法的签名更改为
def __init__(self, usuario, *args, **kwargs):
所以你必须总是提供usuario作为第一个参数。
尝试将您的观点更改为以下内容:
@login_required(login_url='/login/')
def archivoview(request):
usuario = request.user
if request.method == 'POST':
form = ProcFTPForm(usario, request.POST)
if form.is_valid():
...
return HttpResponseRedirect('/home/')
else:
form = ProcFTPForm(usuario)
return render_to_response('archivo.html',{'form':form},context_instance=RequestContext(request))