2010-04-07 111 views
1

我正在写网站,我想实现配置文件管理。基本的东西 将自己编辑一些用户的详细信息,如名字和姓 等。现在,我不得不扩展用户模型来添加我自己的东西,和电子邮件地址。Django扩展用户模型并显示表单

我有麻烦显示窗体。示例将更好地描述我想要达到的目标。

这是我的扩展用户模型。

class UserExtended(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    kod_pocztowy = models.CharField(max_length=6,blank=True) 
    email = models.EmailField() 

这就是我的表单的样子。

class UserCreationFormExtended(UserCreationForm): 
    def __init__(self, *args, **kwargs): 
     super(UserCreationFormExtended, self).__init__(*args, **kwargs)  
     self.fields['email'].required = True 
     self.fields['first_name'].required = False 
     self.fields['last_name'].required = False 
    class Meta: 
     model = User 
     fields = ('username', 'first_name', 'last_name', 'email') 

注册时,因为我需要让用户把用户名和电子邮件,但是当它去编辑配置文件会显示太多的领域,它工作正常。我不希望他们能够编辑用户名和电子邮件。我如何禁用窗体中的字段?

感谢您的帮助。

回答

0

我所做的是我创造了新的形式,并用它和它的工作。它允许从用户模型编辑字段,而不仅仅是UserExtended。感谢帮助。

类UserProfileForm(forms.ModelForm):

def __init__(self, *args, **kwargs): 
    super(UserProfileForm, self).__init__(*args, **kwargs) 
    try:    
     self.fields['first_name'].initial = self.instance.user.first_name 
     self.fields['last_name'].initial = self.instance.user.last_name 
     self.fields['email'].initial = self.instance.user.email 
    except models.User.DoesNotExist: 
     pass 

email = forms.EmailField(label = "Główny adres email", 
         help_text="", 
         required=True) 
first_name = forms.CharField(label = "Imię", 
          required=False) 
last_name = forms.CharField(label = "Nazwisko", 
          required=False) 
kod_pocztowy = forms.RegexField('\d{2}-\d{3}', 
           required = False, 
           label="Kod pocztowy", 
           error_messages={"invalid":'Poprawna wartość to np: 41-200'}) 

class Meta: 
    model = UserExtended 
    exclude = ('user') 

def save(self, *args, **kwargs): 
    u = self.instance.user 
    u.email = self.cleaned_data['email'] 
    u.first_name = self.cleaned_data['first_name'] 
    u.last_name = self.cleaned_data['last_name'] 
    u.kod_pocztowy = self.cleaned_data['kod_pocztowy'] 
    u.save() 
    profile = super(UserProfileForm, self).save(*args, **kwargs) 
    return profile 
0

您应该创建另一个表单,该表单不包括您不想要的字段(或者不要在字段列表中指定它们)。然后将2种不同的表单传递给注册和编辑配置文件视图。

0

尝试在Meta去除领域“用户名”和“电子邮件”:

class Meta: 
    model = User 
    fields = ('first_name', 'last_name')