2011-05-22 36 views
5

necesito añadir los first_name y last_name campos asociados con el modelo que User y mostrarlo en el perfil form.añadir nombre apellido campo y apellidos en django-perfil

campos:

>>> user = User.objects.get(pk=1) 
    >>> user.first_name 
     u'Some' 
    >>> user.last_name 
     u'User' 

Mi modelo es algo como esto:

class UserProfile(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    personal_email = models.EmailField(blank=True) 
    address = models.CharField(max_length=140) 
    phone_number = models.CharField(max_length=20) 

    def __unicode__(self): 
     return u'Profile of user: %s' % self.user.username 

cuando se representa el formulario de perfil, wo uld tiene que mostrar los campos.

first_name: 
last_name: 
personal_email: 
address: 
phone_number: 

Editar

resolví:

# forms.py

class UserProfileForm(forms.ModelForm): 
    first_name = forms.CharField(max_length=30) 
    last_name = forms.CharField(max_length=30) 

    def __init__(self, *args, **kwargs): 
     super(UserProfileForm, self).__init__(*args, **kwargs) 
     self.fields['first_name'].initial = self.instance.user.first_name 
     self.fields['last_name'].initial = self.instance.user.last_name 

     self.fields.keyOrder = [ 
      'first_name', 
      'last_name', 
      'personal_email', 
      'address', 
      'phone_number', 
      ] 


    def save(self, *args, **kwargs): 
     super(UserProfileForm, self).save(*args, **kwargs) 
     self.instance.user.first_name = self.cleaned_data.get('first_name') 
     self.instance.user.last_name = self.cleaned_data.get('last_name') 
     self.instance.user.save() 

    class Meta: 
     model = UserProfile 

# urls.py

 url(r'^profiles/edit/', edit_profile, {'form_class': UserProfileForm}, 
              name='profiles_edit_profile' ), 

y agrega en # signals.py

@receiver(post_save, sender=User) 
    def create_profile(sender, instance, created, **kwargs): 
     if created: 
      userprofile, new = UserProfile.objects.get_or_create(user=instance) 

Respuesta

3

Suponiendo que usted está usando un ModelForm que podría hacer lo siguiente:

class profileForm(ModelForm): 
    first_name = forms.CharField(max_length=30, required=False) 
    last_name = forms.CharField(max_length=30, required=False) 
    class Meta: 
     model = UserProfile 

    def save(self, commit=True): 
     m = super(customerForm, self).save(commit=False) 
     # Update and save user model here 
     if commit: 
      m.save() 
     return m 

Puede omitir anulando los métodos guardados y guarda en tu vista. Obtenga el valor del primer nombre y apellido y guárdelo después de validar el formulario. También es posible que desee utilizar una transacción para asegurarse de que todo se guarda o nada lo hace.

+1

de esta manera tendrían que hacer un 'views' y crear un' urls'? –

Cuestiones relacionadas