Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

164
Visualizações
Cómo pasar un objeto de usuario a formularios en Django

¿Cómo pasaría un objeto de usuario o una solicitud a mi formulario para usarlo como valor inicial para el cuadro de texto de entrada?

Por ejemplo, tengo mi formulario:

 class ContactForm(forms.Form): contact_name = forms.CharField(required=True, initial="???") contact_email = forms.EmailField(required=True) subjects = forms.ChoiceField(choices=emailsubjects) content = forms.CharField( required=True, widget=forms.Textarea ) def __init__(self, *args, **kwargs): self.request = kwargs.pop("request") super(ContactForm, self).__init__(*args, **kwargs) self.fields['contact_name'].label = "Your name:" self.fields['contact_email'].label = "Your email:" self.fields['content'].label = "What do you want to say?" self.fields['subjects'].label = "Please, select the subject of your message"

Donde quiero que mi nombre de usuario sea un valor predeterminado para el campo nombre_contacto.

Aquí está mi views.py, donde llamo al formulario:

 def ContactsView(request): form_class = ContactForm(request=request) # new logic! if request.method == 'POST': form = form_class(data=request.POST) if form.is_valid(): contact_name = request.POST.get( 'contact_name' , '') contact_email = request.POST.get( 'contact_email' , '') form_content = request.POST.get('content', '') subjects = form.cleaned_data['subjects'] subjects = dict(form.fields['subjects'].choices)[subjects] # Email the profile with the # contact information template = get_template('threeD/email/contact_template.txt') context = Context({ 'contact_name': contact_name, 'subjects': subjects, 'contact_email': contact_email, 'form_content': form_content, }) content = template.render(context) email = EmailMessage( "New message from " + contact_name, content, "Message - " + subjects + ' ', ['smart.3d.printing.facility@gmail.com'], headers={'Reply-To': contact_email} ) email.send() messages.success(request, "Thank you for your message.") return redirect('/index/contacts/') return render(request, 'threeD/contacts.html', { 'form': form_class, })

Cualquier ayuda sería muy apreciada

about 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Ha cambiado su formulario para tomar el objeto de solicitud. Por lo tanto, puede acceder a self.request.user dentro de los métodos de su formulario:

 class ContactForm(forms.Form): ... def __init__(self, *args, **kwargs): self.request = kwargs.pop("request") super(ContactForm, self).__init__(*args, **kwargs) self.fields['contact_name'].label = "Your name:" self.fields['contact_name'].initial = self.request.user.first_name

También debe actualizar su vista para pasar el objeto de solicitud. Recuerde actualizar el código para las solicitudes GET y POST.

 if request.method == 'POST': form = ContactForm(data=request.POST, request=request) ... else: # GET request form = ContactForm(request=request)

Finalmente, al pasar la solicitud al formulario, la ha acoplado estrechamente a la vista. En su lugar, podría ser mejor pasar al user al formulario. Esto facilitaría probar el formulario por separado de la vista. Si cambia el formulario, recuerde actualizar también la vista.

about 4 years ago · Santiago Trujillo Relatório

0

Debe pasar los valores iniciales en la vista:

puntos de vista:

 def ContactsView(request): form_class = ContactForm(request=request, initial={'contact_name': request.user.first_name}) ...
about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda