我的Django网站有些问题。我想建立一个电子商务。我有一个自定义的用户模型,有一些我需要的字段(比如地址、电子邮件等)。代码如下:
class UsuarioFunnaticos(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(max_length=255, unique=True, db_index=True)
USERNAME_FIELD = "email"
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
nome_completo = models.CharField(max_length=255)
cep_entrega_cliente = models.CharField(max_length=9)
rua_entrega_cliente = models.CharField(max_length=100)
bairro_entrega_cliente = models.CharField(max_length=100)
numero_entrega_cliente = models.CharField(max_length=10)
complemento_entrega_cliente = models.CharField(max_length=20, blank=True)
ACRE = 'AC'
ALAGOAS = 'AL'
# Some other choices
SERGIPE = 'SE'
TOCANTINS = 'TO'
ESTADOS = (
(ACRE, 'Acre'),
(ALAGOAS, 'Alagoas'),
(AMAPA, 'Amapa'),
(AMAZONAS, 'Amazonas'),
(BAHIA,'Bahia'),
(CEARA,'Ceara'),
(DISTRITO_FEDERAL,'Distrito Federal'),
(ESPIRITO_SANTO,'Espirito Santo'),
(GOIAS,'Goias'),
(MARANHAO,'Maranhao'),
(MATO_GROSSO,'Mato Grosso'),
(MATO_GROSSO_DO_SUL,'Mato Grosso do Sul'),
(MINAS_GERAIS,'Minas Gerais'),
(PARA,'Para'),
(PARAIBA,'Paraiba'),
(PARANA,'Parana'),
(PERNAMBUCO,'Pernambuco'),
(PIAUI,'Piaui'),
(RIO_DE_JANEIRO,'Rio de Janeiro'),
(RIO_GRANDE_DO_NORTE,'Rio Grande Do Norte'),
(RIO_GRANDE_DO_SUL,'Rio Grande Do Sul'),
(RONDONIA,'Rondonia'),
(RORAIMA,'Roraima'),
(SANTA_CATARINA,'Santa Catarina'),
(SAO_PAULO,'Sao Paulo'),
(SERGIPE,'Sergipe'),
(TOCANTINS,'Tocantins'),
)
estado_entrega_cliente = models.CharField(max_length=30, choices=ESTADOS)
cidade_entrega_cliente = models.CharField(max_length=90)
telefone = models.CharField(max_length=20)
objects = UsuarioFunnaticosManager()
def get_full_name(self):
return self.nome_completo
def get_short_name(self):
return self.nome_completo
def __unicode__(self):
return self.email
在管理上,我有一个usuariofunnationicoschangeform,它在Django管理上运行得非常好。其代码为:
class UsuarioFunnaticosChangeForm(forms.ModelForm):
password = ReadOnlyPasswordHashField()
class Meta:
model = UsuarioFunnaticos
def clean_password(self):
return self.initial["password"]
现在我正在尝试建立一个地方,用户可以去改变他们的用户信息,如果他们想改变他们的注册地址,电话等。我的看法如下:
def alterar_dados(request):
if request.method == 'POST':
form_edicao = UsuarioFunnaticosChangeForm(request.POST)
if form_edicao.is_valid():
usuario = UsuarioFunnaticos.objects.get(email=user.request.email)
usuario.nome_completo = form_edicao.cleaned_data['nome_completo']
usuario.rua_entrega_cliente = form_edicao.cleaned_data['rua_entrega_cliente']
usuario.bairro_entrega_cliente = form_edicao.cleaned_data['bairro_entrega_cliente']
usuario.numero_entrega_cliente = form_edicao.cleaned_data['numero_entrega_cliente']
usuario.complemento_entrega_cliente = form_edicao.cleaned_data['complemento_entrega_cliente']
usuario.estado_entrega_cliente = form_edicao.cleaned_data['estado_entrega_cliente']
usuario.cidade_entrega_cliente = form_edicao.cleaned_data['cidade_entrega_cliente']
usuario.telefone = form_edicao.cleaned_data['telefone']
usuario.save()
return HttpResponseRedirect('/conta')
else:
form_edicao = UsuarioFunnaticosChangeForm()
return render_to_response('conta_cliente/alterar_dados.html', { 'form_edicao': form_edicao }, context_instance = RequestContext(request))
我也试过了_保存(),但两者都返回以下错误:
KeyError at /conta/alterardados/
'password'
我不希望我的用户再次输入他们的密码来更改他们的用户信息,因为他们只有在已经登录的情况下才能访问网站的这一部分。有人能帮忙吗?你知道吗
嗯,在实例化表单时,应该将现有的用户对象作为
instance
参数传递。你知道吗但我不明白为什么要乱搞密码。如果不希望password字段出现在表单上,只需将其添加到表单元类中的
exclude
列表中。你知道吗相关问题 更多 >
编程相关推荐