2014-10-10 5 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 : 내가 로그인 한 사용자 이름과 필드 usuario를 작성해야

@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)) 

. 양식을 저장하기 전에 form = request.user.username으로 시도했습니다. 이 작업은 양식 정의 또는보기의 값을 전달해야한다는 혼란 스럽습니다.

검색된 값을 데이터베이스에서 덮어 쓰고 필드를 양식 클래스의 사용자 이름으로 채울 수있는 경우 가능합니다.

다른 질문 양식의 위젯 유형을 어떻게 변경합니까? id_proveedor 필드는 외래 키이며 드롭 다운 상자 (위젯 선택)로 렌더링되지만 값을 편집 할 수없는 레이블에 표시된 값을 표시해야합니다. 읽기 전용 속성으로 시도했지만 사용자가 선택 상자에 글을 쓸 수 없지만 드롭 다운에서 선택할 수 있습니다. 어떻게 위젯을 변경하거나하는 방법을 나는

당신은 항상 당신이 폼 클래스에 필요한 어떤 인수 나 키워드 인수를 전달할 수 있습니다
+0

당신은'request.user.username'에 의해 사용자 이름을 얻을 수 있습니다. –

+0

위젯 유형에 대해 다른 질문을 게시해야합니다. – Brandon

답변

0

, 당신은 단지에있는 선택 상자에서 사전에

감사 기능 dwon 드롭을 사용할 수 있습니다 내가 ACR 온

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

+0

죄송합니다. 귀하의 질문에 대한 오해가있는 것 같지만, 앞으로 나의 코드 예제가 도움이되기를 바랍니다. – Brandon

0

: 그것은 기대 아니에요 arg 또는 kwarg을 받고 있기 때문에 super()를 호출 할 때 전달되는 *args 또는 **kwargs에서 제거, 그렇지 않으면 장고 예외가 발생합니다 당신의 문제와 똑같은 해결책을 찾았습니다. 나는 이것이 최선의 해결책인지 아닌지, 아니면 나중에 문제가 생길지 모른다.