2010-02-08 3 views
1

내 질문은이 질문에 대한 매우 유사합니다장고 : 모델을 저장하여 사용자 ID를 저장

Django: Populate user ID when saving a model 불행하게도 나는 매우 자신의 대답을 이해하지 못했다.

사용자가 로그인하면 해당 사용자가 링크를 제출할 수 있기를 원하며 채울 수없는 user_id 외래 키가 있습니다.

def submit(request): 
    if request.method == 'POST': 
     form = AddLink(request.POST) 
     if form.is_valid(): 
      form.save() 
      return redirect('home') 
    else: 
     form = AddLink() 

    return render_to_response('links/submit.html', {'form': form}) 

매번 나는 언급 내 양식을 제출

이해하지만 난 내 양식 객체에 user_id를 추가하는 방법을 모르는 것
null value in column "user_id" violates not-null constraint 

. 현재 로그인 한 사용자의 ID에 액세스하여 양식 데이터와 함께 제출하려면 어떻게해야합니까?

답변

11

당신은 같은 것을 할 수 있습니다

if form.is_valid(): 
    link = form.save(commit=False) 
    link.user = request.user 
    link.save() 

이 = 거짓 커밋이 실제로 데이터베이스에 저장되기 전에 결과 객체를 수정할 수 있습니다.

+0

나는 ...이 그것을하는 최선의 방법이라고 보았다? 이 같은 것은 정말로 보편적 인 것처럼 보이고, 나는 그들이 "자동적 인"것이었을 것이라고 생각한다. – TheLizardKing

+0

사용자가보기에 로그인했는지 확인하는 것을 잊지 마십시오. @login_required 데코레이터는 매우 좋습니다 :-) – Klette

+0

글쎄, 폼의 숨겨진 필드에 user_id를 삽입 할 수는 있지만 일반적으로 완료된 방법입니다. – Klette

6

이 당신의 if form.is_valid() - 블록을 교체 :

if form.is_valid(): 
    form.instance.user = request.user 
    form.save() 
    return redirect('home') 
관련 문제