2016-04-07 34 views
5

I (forms.py olarak) bu kodu kullanıyorum benim özel kayıt formunu allauth için:django-allauth - geçersiz kılma varsayılan kayıt formu

class RegistrationForm(UserCreationForm): 
    birth_date = forms.DateField(widget=extras.SelectDateWidget(years=BIRTH_DATE_YEARS)) 

    class Meta: 
     model = get_user_model() 
     fields = ('username', 'email', 'password1', 'password2', 'first_name', 'last_name', 'gender', 'birth_date', 'city', 'country') 

Ben tabii bu işaret etmek settings.py içinde ACCOUNT_SIGNUP_FORM_CLASS belirtilen bu forma ve içine koyduğum alanları gösterir. Bununla birlikte, signup yöntemini kullanmama rağmen, gönderme yapılmaz. Ben save ile denedim ama yine de aynı - kullanıcı eklerken ve veritabanına kaydederken özel eklenmiş alanlardan birinin boş olduğunu bir hata ortaya çıkarır. Peki, bunu başarmak için doğru kod nedir?

+0

Belki de proje ayarlarınızda allauth seçeneği eksik! lütfen cevabıma bak ve – rakwen

+0

adapte etmeye çalışıyorum, yukarıda belirttiğim gibi 'ACCOUNT_SIGNUP_FORM_CLASS' ayarlıyım ve form tüm alanlar ile doğru şekilde görüntüleniyor. Sorun onun teslim edilmesidir. – MikiSoft

cevap

12

here numaralı ürüne sahip doğru çözümü bulmuş olan @rakwen numaralı telefona teşekkür ederiz. Benim özel adaptör yazdım ve app adapters.py koydum:

from allauth.account.adapter import DefaultAccountAdapter 

class AccountAdapter(DefaultAccountAdapter): 
    def save_user(self, request, user, form, commit=False): 
     data = form.cleaned_data 
     user.username = data['username'] 
     user.email = data['email'] 
     user.first_name = data['first_name'] 
     user.last_name = data['last_name'] 
     user.gender = data['gender'] 
     user.birth_date = data['birth_date'] 
     user.city = data['city'] 
     user.country = data['country'] 
     if 'password1' in data: 
      user.set_password(data['password1']) 
     else: 
      user.set_unusable_password() 
     self.populate_username(request, user) 
     if commit: 
      user.save() 
     return user 

Sonra belirttiğiniz ACCOUNT_ADAPTER settings.py bu adaptöre işaret etmek ve nihayet çalışmaya başladı!

3

proje bu satırı eklemeyi deneyin setting.py: Eğer eklediyseniz

doğrulamak bu:

app.models olarak
AUTHENTICATION_BACKENDS = (
    "django.contrib.auth.backends.ModelBackend", 
    "allauth.account.auth_backends.AuthenticationBackend", 
) 

ACCOUNT_SIGNUP_FORM_CLASS = "yourapp.forms.customSignupForm" 

app.forms ise
class CustomModel(models.Model): 
    """CustomModel docstring.""" 

    city = forms.CharField(max_length=75) 
    country = forms.CharField(max_length=25) 
    other.... 

:

class SignForm(forms.ModelForm): 
    """SignForm docstring.""" 

    username = forms.CharField(
     max_length=30, 
    ) 
    first_name = forms.CharField(
     max_length=30, 
    ) 
    last_name = forms.CharField(
     max_length=30, 
    ) 
    field... 

    def myclean(): 

    def signup(self, request, user): 
     """You signup function.""" 


    # dont forget to save your model 

    class Meta: 
     model = mymodel.CustomModel 
     fields = [ 
      'city', 
      'country', 
      'field...', 
     ] 

Bunu deneyin yöntem çalışması!

+0

soru: Kullanıcınız adlı özel bir modeliniz var mı? – rakwen

+0

Evet, özel ek alanlarla özel Kullanıcı modelim var. – MikiSoft

+0

, bir profil oluşturmaz veya başka bir şekilde oluşturmazsa, bu modelin django kullanıcısıyla birTek bir ilişkisi olması ve diğer geçerli alanlarınızı eklemesi gerekir. Bir model oluşturmakForm değil basit bir form. Bakın cevabımı içeriğinize uyarladım. – rakwen

İlgili konular