Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

77
Vistas
Cargando opciones en el campo de elección - comportamiento extraño

Tengo un formulario django con un campo de elección, donde cargo dinámicamente algunas opciones en el campo:

 class EntryForm(forms.Form): project = forms.ChoiceField() def __init__(self, *args, **kwargs): user = kwargs.pop('user', None) super(EntryForm, self).__init__( *args, **kwargs) CHOICES2=[] for x in Project.objects.all() : if user in x.users.all(): CHOICES2.append((x.name,x.name)) CHOICES1 = [(x.name,x.name) for x in Project.objects.all()] print CHOICES2==CHOICES1 #this is True in this case self.fields['project']=forms.ChoiceField(choices=CHOICES2)

El formulario se carga en la plantilla con {{form.as_table}}. El formulario no muestra un menú desplegable para el campo del proyecto. Ahora lo extraño: si cambio la última línea a:

 self.fields['project']=forms.ChoiceField(choices=CHOICES1)

funciona, aunque la declaración de impresión de la comparación "=="" devuelve True (las listas son deliberadamente las mismas, esto es solo para probar). Realmente no tengo idea de cómo esto puede funcionar técnicamente.

Editar - mi modelo de proyecto:

 class Project(BaseModel): name = models.CharField(max_length=80) users = models.ManyToManyField(User)
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Creo que debe usar el argumento queryset, que es obligatorio: https://docs.djangoproject.com/en/1.8/ref/forms/fields/#django.forms.ModelChoiceField.queryset

ChoiceField debe declararse con (queryset=None), y en el método __init__ se completa la consulta: https://docs.djangoproject.com/en/1.11/ref/forms/fields/#fields-which-handle-relationships

El problema podría estar relacionado con el orden de ejecución de las consultas o el caché de consultas no perezosas.

Y estoy de acuerdo con little_birdie: el campo ya existe.

over 4 years ago · Santiago Trujillo Denunciar

0

Su campo llamado project ya existe y no hay necesidad de construir otro como lo está haciendo. Es mejor establecer las opciones en el campo existente:

 self.fields['project'].choices = CHOICES2

Pero tal vez sería mejor usar un ModelChoiceField:

 project = ModelChoiceField(queryset=Project.objects.none())

y luego configure el conjunto de consultas que desea en init así:

 self.fields['project'].queryset=Project.objects.filter(users__in=[user])

..que debería darle una lista de todos los proyectos asociados con user .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda