2012-02-17 14 views
6

मैं एक आवेदन लिख रहा हूं जो "जॉब्स" स्टोर करता है। उन्हें "उपयोगकर्ता" से जुड़े विदेशीकी होने के रूप में परिभाषित किया जाता है। मैं समझ नहीं पा रहा हूं कि इसे बनाने के दौरान विदेशीकी को मॉडल में कैसे पारित किया जाए। नौकरी के लिए मेरा मॉडल विदेशीकी के बिना ठीक काम करता था, लेकिन अब जब मैं सिस्टम में उपयोगकर्ताओं को जोड़ने की कोशिश कर रहा हूं तो मुझे फॉर्म को प्रमाणित नहीं किया जा सकता है।Django में, आप मॉडल के उदाहरण में विदेशीकी कैसे पास करते हैं?

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 

मैं समझता हूँ कि इस फार्म में फ़ॉर्म डेटा और अपलोड की गई फ़ाइलों से गुजरता है। हालांकि, मुझे समझ में नहीं आता कि उपयोगकर्ता को विदेशीकी के रूप में सेट करने के लिए कैसे पास किया जाए।

किसी भी व्यक्ति को अग्रिम धन्यवाद जो मदद कर सकता है।

उत्तर

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

+0

@ user1216674 वास्तव में Django 1.6.1 request.user में ठीक काम करता है – AndrewSmiley

+1

अनुरोध। POST अपरिवर्तनीय – mossplix

7

Django में एक ठेठ पैटर्न है:

  1. मॉडल प्रपत्र
  2. से user क्षेत्र को बाहर job.user
  3. सेट commit=False
  4. साथ प्रपत्र को बचाने डेटाबेस
  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

मॉडलफॉर्म सेव() फ़ंक्शन को यह नहीं पता था कि फ़ॉर्म के मेटा क्लास मॉडल विशेषता में निर्दिष्ट मॉडल क्लास का एक उदाहरण लौटाया गया है। इसके लिए धन्यवाद! – AndrewSmiley

संबंधित मुद्दे