我不知道如何从当前用户那里获取用户名。
我有一个使用djano-crispy-forms
呈现的编辑表单:
class RecepcionForm(forms.ModelForm):
fecha_recepcion = forms.DateField(widget=DateInput())
def __init__(self,*args,**kwargs):
super(RecepcionForm,self).__init__(*args,**kwargs)
self.helper = FormHelper(self)
self.helper.layout = Layout(
Field('id_proveedor',
'anio',
'mes',
'usuario',
readonly = True
),
Fieldset('',
'fecha_recepcion',
'num_archivos',
Submit('save','Grabar')
)
)
class Meta:
model = DetalleRecepcion
我的views.py
:
@login_required(login_url='/login/')
def RecepcionView(request):
idp = request.GET.get('i')
anio = request.GET.get('a')
mes = request.GET.get('m')
if request.method == 'POST':
r = DetalleRecepcion.objects.get(id_proveedor=idp,anio=anio,mes=mes)
form = RecepcionForm(request.POST, instance=r)
if form.is_valid():
form.save()
return HttpResponseRedirect('/monitor/')
else:
r = DetalleRecepcion.objects.get(id_proveedor=idp,anio=anio,mes=mes)
form = RecepcionForm(instance=r)
return render_to_response('recepcion.html',
{'form':form},
context_instance=RequestContext(request))
我需要使用记录的用户名填写字段usuario
。
在保存表单之前,我尝试使用form = request.user.username
。
我很困惑,必须在表单定义或视图中传递值。
如果可以覆盖数据库中检索到的值,并使用表单类中的用户名填充该字段。
另一个问题 如何更改表单中的窗口小部件类型。字段id_proveedor是一个外键,并呈现为下拉框(选择小部件),但我需要显示标签中显示的值,无法编辑该值。 我尝试使用readonly属性,但用户无法在选择框中写入,但能够从下拉列表中进行选择。 如何更改窗口小部件或如何从选择框中禁用drop dwon功能
提前致谢
答案 0 :(得分:0)
您始终可以将所需的任何参数或关键字参数传递给表单类,只需将其从调用*args
时传递的**kwargs
或super()
中删除,否则Django会抛出一个例外,因为它收到的arg
或kwarg
没有预料到:
class MyForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user') # notice the .pop()
super(MyForm, self).__init__(*args, **kwargs)
# views.py
def my_view(request):
# assuming the user is logged in
form = MyForm(user=request.user)
答案 1 :(得分:0)
我遇到了与您的问题相同的问题,并且刚刚找到了解决方案。我不知道这是否是最佳解决方案,或者我以后会遇到问题。
def add_trip_event(request):
#form = Trip_EventForm()
#return render(request, 'trips/add_trip_event.html', {'form': form})
if request.method == "POST":
form = Trip_EventForm(request.POST, request.FILES)
if form.is_valid():
post = form.save(commit=False)
post.trip_owner = Owner.objects.get(owner=request.user)
post.pub_date = timezone.now()
post.view = 0
post.save()
form.save_m2m()
return HttpResponseRedirect(reverse('trips:index'))
else:
form = Trip_EventForm()
return render(request, 'trips/add_trip_event.html', {'form': form})