2010-01-02 29 views
17

Bir uygulama için kullanıcı adı ve kullanıcı e-postasını değiştirmek üzere özel django formu oluşturmaya çalışıyorum. Bu yüzden oturum açmış olan kullanıcının mevcut olup olmadığını kontrol etmek için kullanıcı detaylarını oturumdan forma iletmem gerekiyor. Ben bu şekilde yapıyorum:Django Formuna Geçme ** kwargs

user_details views.py

personal_info_form = PersonalInfoForm(prefix='personal_info', 
             user_details=user_details) 

yılında olan bir sözlük:

forms.py olarak
'user_details': [{'username': u'username', 
        'registration_date': datetime.date(2009, 10, 22), 
        'id': 13, 'email': u'[email protected]'}]} 

Aşağıdaki kod var:

class PersonalInfoForm(forms.Form): 

    def __init__(self, *args, **kwargs): 
     user_details = kwargs.pop('user_details', None) 
     super(PersonalInfoForm, self).__init__(*args, **kwargs) 

    username = forms.CharField(required=True, initial=user_details[0]['username']) 
    email = forms.EmailField(required=True) 

Ve aşağıdaki hatayı alıyorum:

name 'user_details' is not defined 

Ben self.user_details ve sadece user_details ile girmeye çalıştım ve bunu yapmaya çalışıyorsun ne daha net bir şekilde bana

cevap

29

user_details, __init__'a iletilmiştir, bu nedenle bunun dışında tanımlanmamıştır. Bu yüzden CharField nesnesini kapatırken ona erişemezsiniz. Eğer kwargs onu büyüttükten sonra örneğin, __init__ kendisinde initial ayarlayın:

class PersonalInfoForm(forms.Form): 

    username = forms.CharField(required=True) 
    email = forms.EmailField(required=True) 

    def __init__(self, *args, **kwargs): 
     user_details = kwargs.pop('user_details', None) 
     super(PersonalInfoForm, self).__init__(*args, **kwargs) 
     if user_details: 
      self.fields['username'].initial = user_details[0]['username'] 

Fırsatın olduğunda, scopes in python üzerinde okuma düşünün.

+1

+ 1 güzel tanımlı değil. Çok benzer bir çözümümüzü göndermeden 10 saniye önce, turuncu afiş çıkar ... güzel bitti! – czarchaic

+0

Teşekkür ederim, şu anda kapsamları hakkında okuyorum :) –

2

açıklayabilir aynı hata veriyor? Yaptığın şeyin gereksiz olduğuna inanıyorum. Eğer, kolayca kullanıcı modeli kullanmak için addapt olabilir Aradığınız buysa http://docs.djangoproject.com/en/dev/topics/forms/modelforms/

>>> from django.forms import ModelForm 

# Create the form class. 
>>> class ArticleForm(ModelForm): 
...  class Meta: 
...   model = Article 

# Creating a form to add an article. 
>>> form = ArticleForm() 

# Creating a form to change an existing article. 
>>> article = Article.objects.get(pk=1) 
>>> form = ArticleForm(instance=article) 

: seni anladım ama Django Model Formlar bakmak emin değilim. Unutmayın, hangi alanların değiştirilmesine izin vermek istediğinizi seçebilirsiniz. instance parametresi, başlangıç ​​alan değerlerini ayarlar (bunu yapmak istediğinizi anladım). Yukarıdaki örnek tüm alanları gösterecektir, aşağıdaki örnek sadece 2 alanın nasıl görüntüleneceğini göstermektedir.

class PartialAuthorForm(ModelForm): 
    class Meta: 
     model = Author 
     fields = ('name', 'title') 

Yardım ettim umarım.

+0

Forms sınıfındaki ** kwargs değişkenlerine erişmeye çalışıyorum. –

+1

Denediniz mi: kwargs ['user_details'] '? – Clash

+0

Evet. Bana 'kwargs' ismi verilmiyor –