6

「ジョブ」を保存するアプリケーションを書いています。これらは、「ユーザー」にリンクされた ForeignKey を持つものとして定義されます。作成時にモデルに ForeignKey を渡す方法がわかりません。Job のモデルは ForeignKey なしで正常に動作しましたが、システムにユーザーを追加しようとしているときにフォームを検証できません。

models.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

views.py では、次のようにオブジェクトを作成していました。

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

これにより、フォーム データとアップロードされたファイルがフォームに渡されることを理解しています。ただし、ForeignKey として設定される User を渡す方法がわかりません。

助けていただける方、よろしくお願いします。

4

2 に答える 2

7

Django の典型的なパターンは次のとおりです。

  1. userモデル フォームからフィールドを除外する
  2. フォームを保存するcommit=False
  3. 設定job.user
  4. データベースに保存

あなたの場合:

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

詳細については、モデル フォームsave()メソッドに関する Django ドキュメントを参照してください。

于 2012-02-17T17:13:46.027 に答える
1

試す:

if request.method == 'POST':
    data = request.POST
    data['user'] = request.user
    form = JobForm(data, request.FILES)
    if form.is_valid():
        #Do something here
于 2012-02-17T16:43:38.713 に答える