Django

2012-03-14 5 views
7

में उपयोगकर्ता मॉडल से कनेक्ट करें त्वरित (शायद मूर्ख) प्रश्न। यह मेरी साइट का प्रवाह है: उपयोगकर्ता लॉग इन करता है और एक कस्टम व्यवस्थापक पृष्ठ पर रीडायरेक्ट किया जाता है। इस व्यवस्थापक पृष्ठ पर उनके पास 'प्रोफ़ाइल' बनाने की क्षमता है। मैं उनके उपयोगकर्ता डेटा के साथ बनाई गई प्रोफाइल को जोड़ना चाहता हूं जैसे कि 1 उपयोगकर्ता 1 प्रोफाइल से संबद्ध है।Django

किसी कारण निम्न काम नहीं कर रहा के लिए (बस

UserAdmin.Models

from django.db import models 
from django.contrib.auth.models import User 

class Profile(models.Model): 
    username = models.ForeignKey(User) 
    firstname = models.CharField(max_length=200) 
    lastname = models.CharField(max_length=200) 
    email = models.EmailField(max_length=200) 

    def __unicode__(self): 
     return self.username 

UserAdmin.Views

def createprofile(request): 

    user = User.objects.get(id=1) 
    profile = Profile(username=user, firstname='Joe', lastname='Soe', email='[email protected]') 
    profile.save() 

मैं मिलती रहती है संबद्ध करने के लिए कोशिश कर रहा है: तालिका useradmin_profile में उपयोगकर्ता नाम नहीं है ame_id

कोई विचार? की सराहना की।

संपादित करें:

मेरी db नष्ट कर दिया गया और एक ताजा syncdb भाग गया, करने के लिए उपयोगकर्ता नाम = models.OneToOneField (उपयोगकर्ता) बदल दिया है। अब मैं प्राप्त कर रहा हूं "u'superuser" असाइन नहीं कर सकता: "प्रोफ़ाइल। उपयोगकर्ता नाम" एक "उपयोगकर्ता" उदाहरण होना चाहिए।

उत्तर

9

UserAdmin.Models

from django.db import models 
from django.contrib.auth.models import User 

class Profile(models.Model): 
    user = models.OneToOneField(User) 

    def __unicode__(self): 
     return self.user.get_full_name() 

UserAdmin.Views

def createprofile(request): 

    user_ = User.objects.get(pk=1) 
    profile = Profile(user=user_) 
    profile.user.first_name = 'Joe' 
    profile.user.last_name = 'Soe' 
    profile.user.email = '[email protected]' 
    profile.user.save() 
    profile.save() 
+0

हम्म, धन्यवाद। अब मुझे मिल रहा है: "यू 'जॉन असाइन नहीं कर सकता": "प्रोफाइल। उपयोगकर्ता नाम" एक "उपयोगकर्ता" उदाहरण होना चाहिए। (जॉन एक उपयोगकर्ता है। उपयोगकर्ता नाम) – user1059105

+0

कोड संपादित किया ... इसे आज़माएं। यद्यपि आपको एक नया सिंकडीबी करना होगा। – Scalamoosh

+0

हम्म। ठीक है कि एक ताजा सिंकडीबी के साथ कोशिश की। जब मैं प्रिंट a.first_name जहां एक = उपयोगकर्ता का उपयोग करने का प्रयास करता हूं तो खोल एक खाली प्रिंटिंग कर रहा है। जब मैं प्रोफ़ाइल ऑब्जेक्ट तक पहुंचने का प्रयास करता हूं और Profile.objects.all() करता हूं तो मुझे पूर्ण_नाम() के बजाय मुद्रित [] मिलता है। कोई विचार? – user1059105

2

से पहले आपको किसी username ForeignKey क्षेत्र था प्रोफाइल मॉडल syncdb'ed। Django केवल टेबल बनायेगा लेकिन उन्हें बनाए जाने के बाद उन्हें बदल नहीं देगा। यहां आपके विकल्पों को सूचीबद्ध करने का उत्तर: https://stackoverflow.com/a/7693297/990224

और आपको username से user नाम बदलने के बारे में सोचना चाहिए।

+0

डीबी को हटाने और एक नया सिंकडीबी करने से समस्या का समाधान नहीं हुआ, जैसा कि दूसरे उत्तर में व्यक्त किया गया है। – user1059105

+0

अच्छा, आपको यह तय करना होगा कि आप उपयोगकर्ता नाम या उपयोगकर्ता को सहेजना चाहते हैं या नहीं। 'U'superuser' असाइन नहीं किया जा सकता है ":" Profile.username "एक" उपयोगकर्ता "उदाहरण होना चाहिए, आपको बताता है कि आप उपयोगकर्ता नाम को username.username में सहेजने की कोशिश कर रहे हैं। लेकिन प्रोफाइल। उपयोगकर्ता नाम एक उपयोगकर्ता होना चाहिए। तो या तो उपयोगकर्ता को पास करें या अपनी OneToOneField को एक CharField में बदलें। – roam