2012-02-17 6 views
6

Sto scrivendo un'applicazione che memorizza "Lavori". Sono definiti come aventi un ForeignKey collegato a un "Utente". Non capisco come passare ForeignKey nel modello durante la sua creazione. Il mio modello per Job ha funzionato bene senza ForeignKey, ma ora che sto cercando di aggiungere utenti al sistema non riesco a convalidare il modulo.In Django, come si passa una Chiave Straniera in un'istanza di un Modello?

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 

In views.py stavo creando gli oggetti nel modo seguente:

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

Capisco che questo passa i dati del modulo ed i file caricati sul modulo. Tuttavia, non capisco come passare in un utente per essere impostato come ForeignKey.

Grazie in anticipo a tutti coloro che possono aiutare.

risposta

1

Prova:

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

Questo funziona correttamente eccetto 'request.user' dovrebbe essere 'request.user.id'. Grazie. – user1216674

+0

@ user1216674 Attualmente in Django 1.6.1 request.user funziona bene – AndrewSmiley

+1

request.POST è immutabile – mossplix

7

Un modello tipico di Django è:

  1. escludere il settore user dal modello di formulario
  2. salvare il modulo con commit=False
  3. impostare job.user
  4. salva nella banca dati

Nel tuo caso:

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

Vedi la documentazione Django sulla model form save() method per ulteriori informazioni.

+0

Non si è realizzato la funzione save() di ModelForm restituita un'istanza della classe del modello specificata nell'attributo del modello di classe Meta del modulo. Grazie per questo! – AndrewSmiley

Problemi correlati