2012-02-17 3 views
6

"잡스"를 저장하는 응용 프로그램을 작성 중입니다. 그들은 "사용자"와 연결된 ForeignKey를 갖는 것으로 정의됩니다. ForeignKey를 생성 할 때 ForeignKey를 모델로 전달하는 방법을 이해하지 못합니다. 내 Model for Job은 ForeignKey없이 잘 작동했지만 이제는 사용자를 시스템에 추가하려고 시도하고 있으므로 유효성을 검사 할 양식을 얻을 수 없습니다.Django에서 ForeignKey를 모델 인스턴스에 어떻게 전달합니까?

models.py 다음과 같이 views.py에서

from django.db import models 
from django import forms 
from django.contrib.auth.models import User 

class Job(models.Model): 
    user = models.ForeignKey(User) 
    name = models.CharField(max_length=50, blank=True) 
    pub_date = models.DateTimeField('date published', auto_now_add=True) 
    orig_image = models.ImageField('uploaded image', upload_to='origImageDB/', blank=True) 
    clean_image = models.ImageField('clean image', upload_to='cleanImageDB/', blank=True) 
    fullsize_image = models.ImageField('fullsize image', upload_to='fullsizeImageDB/') 
    fullsize_clean_image = models.ImageField('fullsize clean image', upload_to='fullsizeCleanImageDB/') 
    regions = models.TextField(blank=True) 
    orig_regions = models.TextField(blank=True) 

class JobForm(forms.ModelForm): 
    class Meta: 
     model = Job 

내가 객체를 생성했다 :

if request.method == 'POST': 
    form = JobForm(request.POST, request.FILES) 
    if form.is_valid(): 
     #Do something here 

나는이 양식에 양식 데이터와 업로드 된 파일을 전달하는 이해합니다. 그러나, 나는 사용자가 ForeignKey로 설정되도록 전달하는 방법을 이해하지 못합니다.

도움을받을 수있는 사람에게 미리 감사드립니다.

답변

1

시도 :

if request.method == 'POST': 
    data = request.POST 
    data['user'] = request.user 
    form = JobForm(data, request.FILES) 
    if form.is_valid(): 
     #Do something here 
+0

'request.user.id'는 'request.user.id'여야합니다. 고맙습니다. – user1216674

+0

@ user1216674 실제로 장고 1.6.1 request.user 잘 작동 – AndrewSmiley

+1

request.POST가 불변입니다 – mossplix

7

장고의 일반적인 패턴은 다음과 같습니다

  1. job.user
  2. 을 설정 commit=False
  3. 와 양식을 저장 모델 양식
  4. 에서 user 필드를 제외 데이터베이스에 저장
  5. 귀하의 경우에는

:

class JobForm(forms.ModelForm): 
    class Meta: 
     model = Job 
     exclude = ('user',) 

if request.method == 'POST': 
    form = JobForm(request.POST, request.FILES) 
    job = form.save(commit=False) 
    job.user = request.user 
    job.save() 
    # the next line isn't necessary here, because we don't have any m2m fields 
    form.save_m2m() 

은 자세한 내용은 model form save() method에 장고 문서를 참조하십시오.

+0

ModelForm save() 함수가 폼의 메타 클래스 모델 특성에 지정된 모델 클래스의 인스턴스를 반환했습니다. 고마워! – AndrewSmiley

관련 문제