Instancia de Django ModelForm con conjunto de consultas personalizado para un campo específico

StackOverflow https://stackoverflow.com/questions/1821289

  •  10-07-2019
  •  | 
  •  

Pregunta

Tengo un modelo similar al siguiente:

class Bike(models.Model):
    made_at = models.ForeignKey(Factory)
    added_on = models.DateField(auto_add_now=True)

Todos los usuarios pueden trabajar en varias fábricas y, por lo tanto, sus perfiles de usuario tienen un ManyToManyField para Factory .

Ahora quiero construir un ModelForm para Bike pero quiero que la lista made_at consista solo en las fábricas en las que trabaja el usuario actual . La idea es que los usuarios puedan agregar bicicletas que hayan ensamblado e ingresar en cuál de las fábricas se fabricó la bicicleta.

¿Cómo hago eso?

¿Fue útil?

Solución

Su pregunta podría ser un engaño de este .

S. respuesta de Lott existe el ticket para resolver su problema. Él respondió:

  

ForeignKey está representada por django.forms.ModelChoiceField, que es un ChoiceField cuyas opciones son un QuerySet modelo. Consulte la referencia de ModelChoiceField.

     

Entonces, proporcione un QuerySet al atributo de conjunto de consultas del campo. Depende de cómo se construya su formulario. Si crea un formulario explícito, tendrá campos nombrados directamente.

     

form.rate.queryset = Rate.objects.filter (company_id = the_company.id)   Si toma el objeto ModelForm predeterminado, form.fields [" rate "]. Queryset = ...

     

Esto se hace explícitamente en la vista. No hackear.

Otros consejos

prueba algo como esto en la vista

form  = BikeForm()
form.fields["made_at"].queryset = Factory.objects.filter(user__factory)

modifique el conjunto de consultas de Factory para que identifique la fábrica en la que trabaja el usuario.

Ahora, debes usar:

    form.base_fields['alumno_item'].queryset = AlumnoItem.objects.prefetch_related(
        'alumno',
        'alumno__estudiante',
        'alumno__estudiante__profile',
        'item'
    )
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top