2016-04-01 16 views
2

için belirtilen bilinmeyen alan (lar) (kullanıcı adı) User ve UserProfile kayıtlarını içeren bir kayıt formu oluşturmaya çalışıyorum. Sorun şu ki, Django, username'un mevcut olmadığını söylüyor.UserProfile - Django

django.core.exceptions.FieldError: Unknown field(s) (username) specified for Use 
rProfile 

Ben oluşturacak istiyorum (hem dahili User ve UserProfile itibaren) tüm istediğim özelliklerini içerir.

Bununla ne yapmalı? Sorun şu ki, UserCreationForm.Meta.fields ekledim, ancak nasıl çalışırım? Bu açık ve basit bir çözüm gibi görünüyor.

class UserProfileCreationForm(UserCreationForm): 
    password1 = forms.CharField(label="Password", widget=forms.PasswordInput) 
    password2 = forms.CharField(label="Password confirmation", widget=forms.PasswordInput) 

    class Meta(UserCreationForm.Meta): 
     model = UserProfile 
     fields = UserCreationForm.Meta.fields + ('date_of_birth','telephone','IBAN',) 

    def clean_password2(self): 
     # Check that the two password entries match 
     password1 = self.cleaned_data.get("password1") 
     password2 = self.cleaned_data.get("password2") 
     if password1 and password2 and password1 != password2: 
      msg = "Passwords don't match" 
      raise forms.ValidationError("Password mismatch") 
     return password2 

    def save(self, commit=True): 
     user = super(UserCreationForm, self).save(commit=False) 
     user.set_password(self.cleaned_data["password1"]) 
     if commit: 
      user.save() 
     return user 

KULLANICIPROFİLİ MODÜLÜ:

Bu

şeklidir hata söylediği gibi

class UserProfile(models.Model): 
    user = models.OneToOneField(User, related_name='user_data') 
    date_of_birth = models.DateField() 
    telephone = models.CharField(max_length=40) 
    IBAN = models.CharField(max_length=40) 
    created = models.DateTimeField(auto_now_add=True) 
    modified = models.DateTimeField(auto_now=True) 

    MARITAL_STATUS_CHOICES = (
     ('single', 'Single'), 
     ('married', 'Married'), 
     ('separated', 'Separated'), 
     ('divorced', 'Divorced'), 
     ('widowed', 'Widowed'), 
    ) 
    marital_status = models.CharField(max_length=40, choices=MARITAL_STATUS_CHOICES, null=True, blank=True) 

    HOW_DO_YOU_KNOW_ABOUT_US_CHOICES = (
     ('coincidence', u'It was coincidence'), 
     ('relative_or_friends', 'From my relatives or friends'), 
    ) 
    how_do_you_know_about_us = models.CharField(max_length=40, choices=HOW_DO_YOU_KNOW_ABOUT_US_CHOICES, null=True, 
               blank=True) 

    # TRANSLATOR ATTRIBUTES 

    is_translator = models.BooleanField(default=False) 

    language_tuples = models.ManyToManyField(LanguageTuple) 

    rating = models.IntegerField(default=0) 

    number_of_ratings = models.BigIntegerField(default=0) 

    def __unicode__(self): 
     return '{} {}'.format(self.user.first_name, self.user.last_name) 

    def __str__(self): 
     return '{} {}'.format(self.user.first_name, self.user.last_name) 

cevap

2

, fields nitelik formu dayanmaktadır modelden alanlar dahil sadece hangi Bu durumda UserProfile. Kullanıcı alanlarını bu şekilde ekleyemezsiniz. Bunun yerine, password1/password2 ile yaptığınız gibi onları sınıf düzeyinde manuel olarak belirtmeniz gerekecektir. Ayrıca onlarla save yönteminde bir şeyler yapmanız gerekecek.

Tüm bunları yapmak yerine, hem Kullanıcı hem de KullanıcıProfil bölümünden alanları içeren özel bir Kullanıcı modeli oluşturmak daha iyi olabilir; Bu şekilde yalnızca bir modeliniz olur ve tüm alanlar otomatik olarak UserCreationForm'a dahil edilir.

+0

Teşekkürler Daniel. Yani bir CustomUserMode (User, UserProfile): pass oluşturmam gerektiğini düşünüyorsunuz? Kimlik doğrulama ve benzer şeyler çalışması gerektiği gibi çalışacak mı? –