基本的に私はいくつかの追加データでユーザーを拡張したいと考えています。 モデルに優れたものはすべて、ドキュメンテーションに従っています。一方DJango 1.9プロファイルレジスタ+更新
models.py
class perfil(models.Model):
Sexos = (
('M','Masculino'),
('F','Femenino'),
)
user = models.OneToOneField(User, related_name='profile')
ci = models.CharField(max_length = 10, blank=True, null=True)
sexo = models.CharField(max_length = 1, choices = Sexos, blank=True, null=True)
fechaNac = models.DateField(blank=True, null=True)
foto = models.CharField(max_length = 300,blank=True, null=True)
tlf = models.CharField(max_length = 11,blank=True, null=True)
def __str__(self):
return self.user.first_name + " " + self.user.last_name
def __unicode__(self):
return self.user
私も同時にプロファイルを入力する、新しいユーザーを登録する必要がありますので、私はこの作られた:
views.py
をdef registroUsuario(request):
if request.user.is_authenticated():
return HttpResponseRedirect('/registro')
if request.method == "POST":
form = formRegistroUsuario(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
nombre = form.cleaned_data['nombre']
apellidos = form.cleaned_data['apellidos']
f_nac = form.cleaned_data['f_nac']
correo = form.cleaned_data['correo']
tlf = form.cleaned_data['tlf']
clave = form.cleaned_data['clave']
sexo = form.cleaned_data['sexo']
ci = form.cleaned_data['ci']
entry = User.objects.create_user(username= username ,email = correo, password = clave)
entry.first_name = nombre
entry.last_name = apellidos
entry.save()
p_entry = perfil.objects.get(user = entry)
p_entry.ci = ci
p_entry.sexo = sexo
p_entry.fechaNac = f_nac
p_entry.tlf = tlf
p_entry.save()
return HttpResponseRedirect('/registro')
else:
return render(request,'registro/home.html', {'form': form})
pass
else:
form = formRegistroUsuario()
return render(request,'registro/home.html', {'form': form})
しかし私は見たことのない厳しい方法ではないと思っていますが、別の方法でそれを動作させる方法を理解できないようです。
また、私は自分のプロファイルを更新できるようにする必要があるので、私は2
class userForm(forms.ModelForm):
username = forms.CharField(disabled = True, label = 'Nombre de usuario')
first_name = forms.CharField(disabled = True, label = 'Nombre')
last_name = forms.CharField(disabled = True, label = 'Apellido')
password = forms.CharField(widget=forms.PasswordInput(), label = 'Contrasena', required = False)
class Meta:
model = User
fields = ['first_name', 'last_name', 'username', 'password']
class perfilForm(forms.ModelForm):
fechaNac = forms.DateField(disabled = True, label = 'Fecha de nacimiento')
tlf = forms.CharField(label = 'Numero de telefono')
ci = forms.CharField(disabled = True, label = 'CI')
correo = forms.CharField(disabled = True)
class Meta:
model = perfil
exclude = ('user',)
そしてviews.py
@login_required(login_url='/registro/login/')
def editarUsuario(request):
if request.method == "POST":
userform = userForm(instance = request.user, data = request.POST)
profileform = perfilForm(instance = request.user.perfil, data = request.POST)
if userform.is_valid() and profileform.is_valid():
user = userform.save(commit = False)
user.user = request.user
if userform.cleaned_data['password']:
user.set_password(userform.cleaned_data['password'])
user.save()
profile = profileform.save(commit = False)
profile.user = user
profile.save()
return HttpResponseRedirect('/registro/editar')
else:
return render(request,'registro/editar.html', {'formUser': userform,
'formPerfil': profileform})
else :
formUser = userForm(instance = request.user)
formPerfil = perfilForm(instance = request.user.perfil)
return render(request,'registro/editar.html', {'formUser': formUser,
'formPerfil': formPerfil})
ものは私が作るために自分のコードを向上させることができるか知りたい作らそれはジャンゴの方法です。 また、ビットofftopic、私はそれらのdisabled = Trueフィールドをラベルとして表示する代わりに、読み取り専用のフィールドの代わりに、私はそれを達成することができますか?