2012-02-17 93 views
6

我正在寫一個存儲「作業」的應用程序。它們被定義爲具有鏈接到「用戶」的ForeignKey。我不明白如何在創建它時將ForeignKey傳遞到模型中。 My Model for Job在沒有ForeignKey的情況下工作得很好,但現在我試圖將用戶添加到系統中,我無法獲取表單進行驗證。在Django中,你如何將一個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。

在此先感謝任何可以幫助的人。

回答

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'應該是'request.user.id'。謝謝。 – user1216674 2012-02-17 18:02:00

+0

@ user1216674其實在Django 1.6.1中request.user工作正常 – AndrewSmiley 2014-02-18 17:33:06

+1

request.POST是不可變的 – mossplix 2014-04-07 11:46:04

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

見關於model form save() method Django文檔以獲取更多信息。

+0

沒有意識到ModelForm的save()函數返回了在表單的Meta類模型屬性中指定的模型類的一個實例。感謝你! – AndrewSmiley 2014-02-18 17:32:06

相關問題