2013-11-14 15 views
10

मिला है, जब उपयोगकर्ता बनाया गया है तो उपयोगकर्ता और ऑब्जेक्ट बनाने के लिए मैं Django का उपयोग कर रहा हूं। लेकिन वहाँ एक त्रुटि है__init __() को एक अप्रत्याशित कीवर्ड तर्क 'उपयोगकर्ता'

__init__() got an unexpected keyword argument 'user'

जब view.py. में register() फ़ंक्शन को कॉल समारोह है:

def register(request): 
    '''signup view'''  
    if request.method=="POST": 
     form=RegisterForm(request.POST) 
     if form.is_valid(): 
      username=form.cleaned_data["username"] 
      email=form.cleaned_data["email"] 
      password=form.cleaned_data["password"] 
      user=User.objects.create_user(username, email, password) 
      user.save() 
      return HttpResponseRedirect('/keenhome/accounts/login/') 
     else: 
      form = RegisterForm()  
      return render_to_response("polls/register.html", {'form':form}, context_instance=RequestContext(request)) 

    #This is used for reinputting if failed to register  
    else: 
     form = RegisterForm()  
     return render_to_response("polls/register.html", {'form':form}, context_instance=RequestContext(request)) 

और वस्तु वर्ग है:

class LivingRoom(models.Model): 
    '''Living Room object''' 
    user = models.OneToOneField(User) 

    def __init__(self, temp=65): 
     self.temp=temp 

    TURN_ON_OFF = (
     ('ON', 'On'), 
     ('OFF', 'Off'), 
    ) 

    TEMP = (
     ('HIGH', 'High'), 
     ('MEDIUM', 'Medium'), 
     ('LOW', 'Low'), 
    ) 

    on_off = models.CharField(max_length=2, choices=TURN_ON_OFF) 
    temp = models.CharField(max_length=2, choices=TEMP) 

#signal function: if a user is created, add control livingroom to the user  
def create_control_livingroom(sender, instance, created, **kwargs): 
    if created: 
     LivingRoom.objects.create(user=instance) 

post_save.connect(create_control_livingroom, sender=User) 

Django त्रुटि पृष्ठ सूचित करता है त्रुटि जानकारी: user=User.objects.create_user(username, email, password) और LivingRoom.objects.create(user=instance)

मैं इस समस्या को खोज करने के लिए करने की कोशिश की , कुछ मामलों को ढूंढना, लेकिन अभी भी यह पता नहीं लगा सकता कि इसे कैसे हल किया जाए।

+0

मेरा अनुमान है कि यह यहां असफल रहा है: 'create_control_livingroom' क्या आप सिग्नल बंद कर सकते हैं और कोशिश कर सकते हैं? और क्या आप स्टैकट्रैक भी दिखा सकते हैं? – karthikr

+0

आप 'LivingRoom .__ init__' विधि को * * * temp' पर क्यों सीमित करते हैं? –

उत्तर

5

आप

LivingRoom.objects.create(user=instance) 

ऐसा नहीं कर सकते क्योंकि आप एक init विधि है कि नहीं तर्क के रूप में user ले करता है। इसे पारित एक ही तर्क - के रूप में आप अगर आप ट्रैस बैक पढ़ा था ध्यान दिया होगा -

आप

#signal function: if a user is created, add control livingroom to the user  
def create_control_livingroom(sender, instance, created, **kwargs): 
    if created: 
     my_room = LivingRoom() 
     my_room.user = instance 
+0

हाँ, समस्या '__init __() 'फ़ंक्शन से है, लेकिन यह फ़ंक्शन उपयोगकर्ता को तर्क के रूप में क्यों नहीं लेता है? – noben

+0

क्योंकि "init" फ़ंक्शन में केवल 2 स्वीकार्य चर 'def __init __ (स्वयं, temp = 65) ',' self' (क्लास इंस्टेंस) और 'temp' है। साथ ही, कक्षा चर "उपयोगकर्ता" को अभी तक उस उदाहरण के लिए परिभाषित नहीं किया गया है। –

1

LivingRoom.objects.create() कॉल LivingRoom.__init__() की तरह कुछ करना चाहते हैं। एक लंबी कहानी कम करने के लिए, एक Django models.Model सबक्लास का प्रारंभकर्ता अकेला छोड़ दिया जाता है, या मॉडल के मेटा फ़ील्ड से मेल खाने वाले * तर्क और ** kwargs स्वीकार करना चाहिए। फ़ील्ड के लिए डिफ़ॉल्ट मान प्रदान करने का सही तरीका फ़ील्ड कन्स्ट्रक्टर में default कीवर्ड का उपयोग करके ठीक है जैसा कि FineManual में बताया गया है।

4

मुझे एक ही त्रुटि मिली।

मेरे विचार को मैं get_form_kwargs अधिभावी था() इस तरह:

class UserAccountView(FormView): 
    form_class = UserAccountForm 
    success_url = '/' 
    template_name = 'user_account/user-account.html' 

def get_form_kwargs(self): 
    kwargs = super(UserAccountView, self).get_form_kwargs() 
    kwargs.update({'user': self.request.user}) 
    return kwargs 

लेकिन मेरी फार्म पर मैं init() विधि ओवरराइड करने में विफल रहा। एक बार मैंने ऐसा किया। समस्या हल हो गई

class UserAccountForm(forms.Form): 
    first_name = forms.CharField(label='Your first name', max_length=30) 
    last_name = forms.CharField(label='Your last name', max_length=30) 
    email = forms.EmailField(max_length=75) 

    def __init__(self, *args, **kwargs): 
     user = kwargs.pop('user') 
     super(UserAccountForm, self).__init__(*args, **kwargs) 
+0

'** kwargs' और' super() 'भाग ने मेरे लिए चाल बनाई – n1000

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

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