Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

251
Views
Iterar sobre el formulario personalizado de Django

Estoy tratando de crear una forma dinámica, con un número variable de CharFields. Quiero poder mostrarlos a voluntad en lugares semi-arbitrarios en mi formulario. Mi enfoque fue crear una función iterable que presentara los self.fields[INDEX] correctos. Sin embargo, cuando hago esto, literalmente veo esto:

 <django.forms.fields.CharField object at 0x80bae6be0> <django.forms.fields.CharField object at 0x80bae6f98> <django.forms.fields.CharField object at 0x80bae6da0>

¿Cómo hago un render CharField() como se esperaba?

Mi código está a continuación:

 class ImplementationForm(forms.ModelForm): """ Specifies the implementation of a given control. """ class Meta: model = Implementation fields = ['implemented', 'scope', 'separate'] def __init__(self, *args, **kwargs): control = kwargs.pop('control') super(ImplementationForm, self).__init__(*args, **kwargs) self.fields['separate'].widget.attrs.update({'class': 'separate'}) self.fields['scope'].widget.attrs.update({'class': 'scope'}) for substatement in control.substatement.all(): self.fields['statement_%s'%substatement.pk] = forms.CharField() def subfield(self): print("Comes herE") for index in self.fields: if index[:10] == 'statement_': yield self.fields[index]

La plantilla básicamente hace esto:

 {% for x in myform.subfield %} {{ x }} {% endfor %}
about 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Lo que está buscando son los BoundFields del formulario. por ejemplo, {{ form.email }} Está iterando sobre las instancias de campo (no las instancias de BoundField del formulario que envuelven las instancias de campo), por ejemplo, {{ form.field.email }}. Esta es la razón por la que está recibiendo la

<django.forms.fields.CharField object at 0x80bae6da0>

resultado de su plantilla. Ver: https://stackoverflow.com/a/671305/3035260

Consulte también la documentación de Django: https://docs.djangoproject.com/en/1.10/ref/forms/api/#django.forms.BoundField

Pruebe de esta manera sucia ( consulte mi edición a continuación para obtener una solución mucho mejor ):

 {# Iterate over your list of field instances #} {% for x in myform.subfield %} {# Find the matching BoundField instance #} {% for field in myform %} {% if field.field == x %} {# Matching BoudField instance found, display it. #} {{ field }} {% endif %} {% endfor %} {% endfor %}

Editar: Acabo de encontrar un enfoque mejor (menos sucio): un campo tiene un

get_bound_field(self, form, field_name)

método según los documentos: https://docs.djangoproject.com/en/1.10/_modules/django/forms/fields/#Field.get_bound_field

Entonces, en su método de subcampo en la última línea (la línea 'rendimiento'), intente esto:

 yield self.fields[index].get_bound_field(self, index)

Entonces, su plantilla seguirá siendo la misma:

 {% for x in myform.subfield %} {{ x }} {% endfor %}

y todo debería funcionar como usted pretendía.

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!