1

¿Cómo mostrar todos los valores de los campos de un modelo desde un formulario en Django?

Estoy creando una página para editar la cuenta del usuario. Los nuevos valores se guardan sin problemas, pero no puedo mostrar los valores actuales de los campos en el formulario (usando formularios.ModelForm).

formularios.py:

 class UserForm(forms.ModelForm): class Meta: model = User fields = ('email', 'first_name', 'last_name') class UsuarioForm(forms.ModelForm): class Meta: model = USUARIO fields = ('cpfCnpj', 'dataNascimento', 'telefone', 'receberNotificacoes', 'tipoUsuario' )

views.py:

 @login_required @transaction.atomic def modificar_cadastro(request): if request.method == "POST": user_form = UserForm(request.POST, instance=request.user) usuario_form = UsuarioForm(request.POST, instance=request.user.usuario) if usuario_form.is_valid() and user_form.is_valid(): user_form.save() usuario_form.save() return render(request, 'index.html') else: messages.error(request, ('Please correct the error below.')) else: usuario_form = UsuarioForm(instance=request.user) user_form = UserForm(instance=request.user.usuario) return render(request, 'modificar-cadastro.html', { 'usuario_form': usuario_form, 'user_form': user_form, })

modelo:

 {% extends 'base.html' %} {% load crispy_forms_tags %} {% block conteudo %} <h2>Modificar cadastro</h2> <form method="POST" class="post-form">{% csrf_token %} {{ user_form|crispy }} {{ usuario_form|crispy }} <button type="submit" class="btn btn-outline-dark">Save</button> </form> {% endblock %}

modelos.py:

 class USUARIO(models.Model): user = models.OneToOneField(User, on_delete=CASCADE) tipoUsuario = models.IntegerField(choices=TIPOS_USUARIO, default=1) cpfCnpj = models.CharField(max_length=11, blank=False, null=True, verbose_name='CPF') dataNascimento = models.DateField(blank=False, null=True, verbose_name='Data de nascimento') telefone = models.CharField(max_length=11, blank=True, null=True, verbose_name='Número de telefone') pontuacao = models.DecimalField(max_digits=30, decimal_places=15, blank=True, null=True) receberNotificacoes = models.BooleanField(default=False)

¿Qué debo hacer con los valores actuales que se mostrarán en mi formulario?

Presentada July 24th 2021 por Admin

Respuestas
0

Está intercambiando las instance= . Usted proporcionó usario_form el objeto de user user_form el objeto de usario Necesitas hacer lo contrario:

 def modificar_cadastro(request): if request.method == 'POST': # … else: # not request.user ↓ usuario_form = UsuarioForm( instance=request.user.usuario ) # not request.user.usario ↓ user_form = UserForm( instance=request.user ) # …

Admin | hace 2 meses



Preguntas relevantes