0
我试图更新Django中的用户配置文件。这是用户模型和扩展成员模型。使用Django窗体更新Django模型
的RegistrationForm如下:
class RegistrationForm(forms.Form):
first_name = forms.CharField(label='', max_length=40, widget=forms.TextInput(attrs={'placeholder': _("First name *"), 'class': 'form-control'}))
last_name = forms.CharField(label='', max_length=40, widget=forms.TextInput(attrs={'placeholder': _("Last name *"), 'class': 'form-control'}))
email = forms.EmailField(label='', max_length=40, widget=forms.TextInput(attrs={'placeholder': _("Email address *"), 'class': 'form-control'}))
password = forms.CharField(label='', max_length=40, widget=forms.PasswordInput(attrs={'placeholder': _("Password *"), 'class': 'form-control'}))
password_confirm = forms.CharField(label='', max_length=40, widget=forms.PasswordInput(attrs={'placeholder': _("Re-type your password *"), 'class': 'form-control'}))
company_name = forms.CharField(label='', max_length=40, widget=forms.TextInput(attrs={'placeholder': _("Company name *"), 'class': 'form-control'}))
member_id = forms.CharField(label='', max_length=40, widget=forms.TextInput(attrs={'placeholder': _("Member number *"), 'class': 'form-control'}))
vat_number = forms.CharField(label='', max_length=40, widget=forms.TextInput(attrs={'placeholder': _("VAT number *"), 'class': 'form-control'}))
address = forms.CharField(label='', max_length=40, widget=forms.TextInput(attrs={'placeholder': _("Address *"), 'class': 'form-control'}))
postcode = forms.CharField(label='', max_length=7, widget=forms.TextInput(attrs={'placeholder': _("Postal code *"), 'class': 'form-control'}))
city = forms.CharField(label='', max_length=40, widget=forms.TextInput(attrs={'placeholder': _("City *"), 'class': 'form-control'}))
telephone = forms.CharField(label='', max_length=40, widget=forms.TextInput(attrs={'placeholder': _("Telephone *"), 'class': 'form-control'}))
mobile = forms.CharField(label='', max_length=40, widget=forms.TextInput(attrs={'placeholder': _("Mobile *"), 'class': 'form-control'}))
terms = forms.BooleanField(label="", required=False, widget=forms.CheckboxInput(attrs={'class': 'magic-checkbox'}))
def clean(self):
password = self.cleaned_data.get("password")
password_confirm = self.cleaned_data.get("password_confirm")
if password != password_confirm:
msg = _("The passwords do not match.")
self.add_error('password', msg)
self.add_error('password_confirm', msg)
def clean_email(self):
email = self.cleaned_data['email']
if User.objects.filter(username=self.cleaned_data['email']).exists():
raise forms.ValidationError(_("User with the given email address already exists."))
return email
def clean_member_id(self):
member_id = self.cleaned_data['member_id']
if User.objects.filter(member__number=member_id).exists():
raise forms.ValidationError(_("User with the given member id already exists."))
return member_id
def clean_terms(self):
terms = self.cleaned_data['terms']
if not terms:
raise forms.ValidationError(_("Please read and accept terms and conditions."))
return terms
登记观点如下:
@transaction.atomic
def new_registration(request):
context = {}
if request.method == "POST":
form = RegistrationForm(request.POST)
if form.is_valid():
language = Language.objects.get(key="EN")
country = Country.objects.get(key="BE")
user = User()
user.username = form.cleaned_data['email']
user.first_name = form.cleaned_data['first_name']
user.last_name = form.cleaned_data['last_name']
user.email = form.cleaned_data['email']
user.set_password(form.cleaned_data['password'])
user.save()
member = Member()
member.company_name = form.cleaned_data['company_name']
member.number = form.cleaned_data['member_id']
member.vat_number = form.cleaned_data['vat_number']
member.address = form.cleaned_data['address']
member.postcode = form.cleaned_data['postcode']
member.city = form.cleaned_data['city']
member.country = country
member.telephone = form.cleaned_data['telephone']
member.mobile = form.cleaned_data['mobile']
member.user = user
member.language = language
member.active = False
member.save()
subscription = Subscription()
subscription.started = datetime.date.today()
subscription.type = Type.objects.get(default=True)
subscription.member = member
subscription.save()
# Send an email to user and to the manager
send_email_with_template({
'subject': _("The account is created"),
'plain_template': 'master/email_templates/account_created_member.txt',
'html_template': 'master/email_templates/account_created_member.html',
'data_dict': {'name': user.first_name},
'send_to': [user.email]
})
send_email_with_template({
'subject': _("A new account is created"),
'plain_template': 'master/email_templates/account_created_manager.txt',
'html_template': 'master/email_templates/account_created_manager.html',
'data_dict': {'user': user, 'member': member},
'send_to': [settings.EMAIL_MANAGER]
})
context['form'] = RegistrationForm()
context['success'] = _("Your account has been created successfully. "
"Once your information has been processed, your account will be activated.")
return render(request, 'master/members/new-registration.html', context)
else:
form = RegistrationForm()
context['form'] = form
return render(request, 'master/members/new-registration.html', context)
我现在想允许用户编辑自己的个人资料。但我希望他们只能编辑像first_name
,last_name
,company_name
,vat_number
,
这几个字段但是如何使用RegistrationForm。
我有更新视图如下:
def update_member_profile(request, user_id):
member = Member.objects \
.filter(user_id=user_id) \
.values('user_id',
'user__first_name',
'user__last_name',
'user__email',
'telephone',
'mobile',
'company_name',
'vat_number',
'address',
'postcode',
'city'
)[0]
context = {'member': member}
return render(request, 'master/members/profile_update.html', context)
在此视图中,我感到我要编辑的用户,但我怎么能现在使用RegistrationForm
这样做呢?
有什么建议吗?
你用什么django版本? – Ramast
@Ramast Django版本是1.10.5 – Boky