2013-10-17 4 views
42

मैं एक कस्टम प्रोफ़ाइल मॉडल है जो इस तरह दिखता है बना दिया है:Django में का उपयोग कैसे करें 'उपयोगकर्ता' विदेशी कुंजी के रूप में 1.5

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

class UserProfile(models.Model): 
    user = models.ForeignKey('User', unique=True) 
    name = models.CharField(max_length=30) 
    occupation = models.CharField(max_length=50) 
    city = models.CharField(max_length=30) 
    province = models.CharField(max_length=50) 
    sex = models.CharField(max_length=1) 

लेकिन जब मैं manage.py syncdb चलाने के लिए, मैं:

MyApp .userprofile: 'उपयोगकर्ता' का मॉडल उपयोगकर्ता के साथ संबंध है, जिसमें या तो स्थापित नहीं किया गया है या सार है।

मैं भी करने की कोशिश की:

from django.contrib.auth.models import BaseUserManager, AbstractUser 

लेकिन यह एक ही त्रुटि देता है। जहां मैं गलत हूं और इसे कैसे ठीक किया जाए?

+0

"django.contrib है आपके सेटिंग्स.py में 'INSTALLED_APPS' में .auth "? – karthikr

+0

यह एक काम करने लगता है: 'user = models.OneToOneField (उपयोगकर्ता, primary_key = True)'। हालांकि यह सुनिश्चित नहीं है कि क्या अंतर है। – supermario

+0

अंतर यह है कि OneToOneField के लिए, उपयोगकर्ता के पास केवल एक प्रोफ़ाइल हो सकती है (जो शायद आप चाहते हैं)। – Mark

उत्तर

48

बदलें इस:

user = models.ForeignKey('User', unique=True) 
इस के लिए

:

user = models.ForeignKey(User, unique=True) 
+7

अगर हम 'अनन्य' बाधा के साथ 'विदेशीकी' के बजाय 'वनटोनफिल्ड' का उपयोग करते हैं तो यह अधिक स्पष्ट नहीं होगा। – vabhdman

+4

सावधान रहें: यदि आप ऐसा करते हैं और बाद में अपने उपयोगकर्ता मॉडल को कस्टम उपयोगकर्ता मॉडल बनाने का प्रयास करने के लिए प्रयास करते हैं, तो आपको इसे सेटिंग्स में बदलना होगा। एथ्यूयूयूएसओएमओएलएलएल एंटोन स्ट्रोगोनॉफ ने अपने - अधिक सही आईएमओ - उत्तर – tato

+2

में कहा है कि 'वनटोनफिल्ड' का उपयोग करें आपका संबंध एक से एक है, और 'primary_key = True' – erajuan

57

वास्तव में Django 1.5 में AUTH_USER_MODEL, was introduced की स्थापना प्रमाणन प्रणाली के साथ एक कस्टम उपयोगकर्ता मॉडल का उपयोग की अनुमति है।

आपको लगता है कि 1.10 के माध्यम से Django 1.5 पर परियोजनाओं के साथ काम करने का इरादा है और बाद में, इस संदर्भ के लिए उपयोगकर्ता मॉडल (जो अब django.contrib.auth.models.User से अलग हो सकता है) उचित तरीका है एक ऐप्लिकेशन में लिख रहे हैं:

class UserProfile(models.Model): 
    user = models.ForeignKey(settings.AUTH_USER_MODEL) 
अधिक जानकारी के लिए
  • docs देखें।

मामले आप शायद इस तरह के रूप में अच्छी तरह से, तो आप शायद क्या संदर्भ Django संस्करण की जाँच करके उपयोग करने के लिए यह निर्धारित करना चाहिए Django 1.4 समर्थन एक पुन: प्रयोज्य एप्लिकेशन लिख रहे हैं, में:

import django 
from django.conf import settings 
from django.db import models 


def get_user_model_fk_ref(): 
    if django.VERSION[:2] >= (1, 5): 
     return settings.AUTH_USER_MODEL 
    else: 
     return 'auth.User' 


class UserProfile(models.Model): 
    user = models.ForeignKey(get_user_model_fk_ref()) 
+0

जोड़ें मैंने कोड को दशमलव संख्या के रूप में संस्करण संख्या के रूप में नोट करने के लिए कोड को बदल दिया है। आखिरकार, संस्करण 1.10 1.5 से अधिक माना जाता है, जो सत्य नहीं है यदि हम उन्हें दशमलव संख्या के रूप में देखते हैं। – Flimm

+0

@ फ़्लेमम मेरे लिए अच्छा लग रहा है, वैसे भी दशकों के साथ उस नृत्य को पसंद नहीं आया। ट्यूपल तुलना इसे धड़कता है (शायद थोड़ा कम अंतर्ज्ञानी लेकिन यह काम करता है!) – Tony

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