我正在写网站,我想实施个人资料管理。基本的东西 将自己编辑一些用户详细信息,如名字和姓氏 现在,我不得不扩展用户模型以添加我自己的东西和电子邮件地址。
我在显示表格时遇到了麻烦。例子将更好地描述我 想实现。
这是我的扩展用户模型。
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 :(得分:0)
您应该创建另一个表单,该表单排除您不想要的字段(或者只是不在字段列表中指定它们)。然后将2个不同的表单传递给注册和编辑配置文件视图。
答案 1 :(得分:0)
尝试从Meta
中的字段中删除“用户名”和“电子邮件”:
class Meta:
model = User
fields = ('first_name', 'last_name')
答案 2 :(得分:0)
我所做的是创建新表单并使用它并且它起作用。它允许编辑User模型中的字段,而不仅仅是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