2014-10-10 77 views
0

我不知道如何從當前用戶獲取用戶名。通過登錄用戶到模型字段django

我有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是一個外鍵,並呈現爲一個下拉框(選擇小部件),但我需要顯示在無法編輯該值的標籤中顯示的值。 我嘗試使用只讀屬性,但用戶無法在選擇框中書寫,但可以從下拉列表中進行選擇。 怎樣才能改變Widget或我怎麼能禁用下降DWON功能從選擇框提前

感謝

+0

您可以通過'request.user.username'獲取用戶名。 – 2014-10-10 18:32:06

+0

您需要針對窗口小部件類型發佈不同的問題。 – Brandon 2014-10-10 19:35:21

回答

0

你總是可以通過你需要一個窗體類的任何參數或關鍵字參數,你只需要

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) 
+0

感謝您的回覆。我用'instance.usuario = request.user'解決了這個問題。 – Joseleg 2014-10-10 22:23:19

+0

對不起,我想我誤解了你的問題,但是我希望我的代碼示例在未來能夠幫助你。 – Brandon 2014-10-11 01:11:53

0

我來到ACR:從被調用時super()傳遞的*args**kwargs刪除它們,否則Django會因爲它的接收argkwarg它不希望拋出一個異常oss與你的問題一樣,並且剛剛找到解決方案。我不知道這是否是最好的解決方案,或者稍後我可能會遇到問題。

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}) 
相關問題