2012-07-15 16 views
18

मैं एक सरल उद्देश्य प्राप्त करने के लिए Django दस्तावेज़ीकरण here का पालन कर रहा हूं: जैसे ही कोई नया उपयोगकर्ता बनाया गया हो, उपयोगकर्ता प्रोफ़ाइल बनाएं।Django - उपयोगकर्ता निर्माण पर उपयोगकर्ता प्रोफ़ाइल बनाएं

मैं एक के खातों की ऐप है और मेरे accounts.models इस तरह दिखता है: बजाय एक होने के

# -*- coding: utf-8 -*- 
from django.db import models 
from django.db.models.signals import post_save 
from django.contrib.auth.models import User 
from main.models import Store 

class UserProfile(models.Model): 

    GENRE_CHOICES = (
     ('m', 'Masculino'), 
     ('f', 'Feminino'), 
    ) 
    MARITAL_STATUS_CHOICES = (
     ('s', 'Solteiro'), 
     ('c', 'Casado'), 
     ('d', 'Divorciado'), 
     ('v', 'Viúvo'), 
    ) 

    user = models.ForeignKey(User, unique=True) 
    birth_date = models.DateField() 
    genre = models.CharField(max_length=1, choices=GENRE_CHOICES) 
    address = models.CharField(max_length=150) 
    postal_code_4 = models.PositiveIntegerField() 
    postal_code_3 = models.PositiveIntegerField() 
    locatity = models.CharField(max_length=30) 
    marital_status = models.CharField(max_length=1, choices=MARITAL_STATUS_CHOICES) 
    child_amount = models.PositiveSmallIntegerField() 
    is_merchant = models.BooleanField(default=False) 
    store = models.ForeignKey(Store, null=True) 

def create_user_profile(sender, instance, created, **kwargs): 
    if created: 
     UserProfile.objects.create(user=instance) 

post_save.connect(create_user_profile, sender=User) 

सब कुछ मेरे लिए ठीक लग रहा है, लेकिन जब एक नया उपयोगकर्ता जोड़ने की कोशिश कर रहा (Django व्यवस्थापक का उपयोग करके), नव निर्मित उपयोगकर्ता और उपयोगकर्ता प्रोफ़ाइल, मैं निम्नलिखित त्रुटि मिलती है:/व्यवस्थापक/प्रमाणन/उपयोगकर्ता पर InternalError/जोड़/ वर्तमान लेन-देन निरस्त किया गया है, लेन-देन ब्लॉक

यहाँ के अंत तक ध्यान नहीं दिया आदेशों ट्रेसबैक त्रुटि हिस्सा है :

/djangoProjects/lwboanova/lwboanova/apps/accounts/models.py in create_user_profile 

34: UserProfile.objects.create(user=instance) 

यह एक ईमानदारी त्रुटि की तरह लगता है लेकिन मुझे इसका कारण नहीं मिल रहा है।

यदि कोई भी मुझे इस पर कुछ मदद दे सकता है तो बहुत अच्छा होगा।

+3

क्या आपके पास django टूलबार स्थापित है? यदि ऐसा है तो इसे अक्षम करने का प्रयास करें ताकि आपको बेहतर त्रुटि जानकारी मिल सके। –

उत्तर

14

बस इसे समझ लिया।

मैं null=TrueUserProfile मॉडल फ़ील्ड के बाकी हिस्सों में जोड़ना भूल गया।

तो accounts.models.UserProfile क्षेत्रों अब लगता है कि:

user = models.ForeignKey(User, unique=True) 
birth_date = models.DateField(null=True) 
genre = models.CharField(max_length=1, choices=GENRE_CHOICES, null=True) 
address = models.CharField(max_length=150, null=True) 
postal_code_4 = models.PositiveIntegerField(null=True) 
postal_code_3 = models.PositiveIntegerField(null=True) 
locatity = models.CharField(max_length=30, null=True) 
marital_status = models.CharField(max_length=1, choices=MARITAL_STATUS_CHOICES, null=True) 
child_amount = models.PositiveSmallIntegerField(null=True) 
is_merchant = models.BooleanField(default=False) 
store = models.ForeignKey(Store, null=True) 

... और सब कुछ के रूप में इरादा काम कर रहा है! आश्रय में मदद करने की कोशिश कर के लिए

चीयर्स ^^

+0

, क्या आप कृपया मुझे जांच और मार्गदर्शन कर सकते हैं, SO सवाल http://stackoverflow.com/questions/17806683/create-row-of-date-while-creating-superuser – user2086641

14

आप उपयोग नहीं करना चाहिए:

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

इसके बजाय इस का उपयोग करें:

from django.conf import settings 
.. 
user = models.OneToOneField(settings.AUTH_USER_MODEL) 
+0

आप OneToOneField के बारे में सही हैं, लेकिन एक संबंध उपयोगकर्ता मॉडल ठीक है। यही है, यदि आप अतिरिक्त फ़ील्ड वाले उपयोगकर्ता में बिल्ड का विस्तार करते हैं। यदि आप उपयोगकर्ता मॉडल में बिल्ड को अपने आप से बदलना चाहते हैं तो केवल 'AUTH_USER_MODEL' सेटिंग का उपयोग करें। – allcaps

+3

@allcaps अंतिम वाक्य भ्रामक है। 'settings.AUTH_USER_MODEL' कोड के इस टुकड़े को एक रिग्रेशन बग से बचाने का एक तरीका है यदि हार्डकोडेड 'उपयोगकर्ता' अब भविष्य में मॉडल नहीं है। – JSmyth

0
def create_profile(sender,**kwargs): 
    if kwargs['created']: 
     user_profile=UserProfile.objects.create(user=kwargs['instance']) 


post_save.connect(create_profile,sender=User) 

मुझे लगता है कि यह आप में मदद मिलेगी।

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