2012-02-17 5 views
6

"ジョブ"を保存するアプリケーションを作成しています。それらは、「ユーザ」にリンクされた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 

私は、このフォームにフォームデータとアップロードされたファイルを渡すことを理解しています。しかし、私はUserを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実際にはDjango 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にDjangoのドキュメントを参照してください。

+0

ModelForm save()関数が、フォームのメタクラスモデルの属性で指定されたモデルクラスのインスタンスを返したことを認識しませんでした。ありがとう! – AndrewSmiley

関連する問題