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

1.5K
Vistas
Menú desplegable dependiente personalizado dentro del administrador de Django

Tengo un proyecto de clave externa por modelo de fase. Estoy teniendo dificultades para crear una lista desplegable dependiente dentro de mi página de administración de Django.

Quiero que cuando el usuario seleccione un proyecto de la fase (desplegable del proyecto) de ese proyecto se muestre en el segundo menú desplegable

¿Cuál sería la mejor manera de lograr esto?

Sería genial si los menús desplegables filtraran los elementos según el valor de su padre.

ingrese la descripción de la imagen aquí

 class Project(models.Model): name = models.CharFieldmax_length = 100, unique= True) short_name = models.CharField(max_length= 4, unique= True) slug = models.SlugField(max_length= 100, allow_unicode=True, null=True, editable= False) location = models.OneToOneField(Location, on_delete = models.SET_NULL, null= True, blank= False, verbose_name= 'موقعیت') start_date = models.DateField(default= timezone.now, null= True, blank= True) end_date = models.DateField(default= timezone.now, null= True, blank= True) duration = models.IntegerField(default= 0, editable= False) class Phase(models.Model): title = models.CharField(max_length= 20) class ProjectPhase(models.Model): project = models.ForeignKey(Project, on_delete= models.CASCADE, related_name= 'phase') phase = models.ForeignKey(Phase, on_delete=models.CASCADE, related_name= 'project') start_date = models.DateField(default= timezone.now) end_date = models.DateField(default= timezone.now) duration = models.IntegerField(default= 0, editable= True)
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

1. importe un archivo multimedia js en ModelAdmin para Generaldata:

 class YourModelAdmin(admin.ModelAdmin): form = YourModelForm #list_display = ['your fields',] class Media: js = ("yourapp/selectajax.js",) admin.site.register(YourModel, YourModelAdmin)

2. cree un nuevo archivo js que guardó el directorio yourproject/yourapp/static/yourapp/ u otro directorio adecuado.

 jQuery(function($){ $(document).ready(function(){ $("#id_project_select").change(function(){ // console.log(obj.currentTarget.value); $.ajax({ url:"/get_phases/", type:"POST", data:{project: $(this).val(),}, success: function(result) { console.log(result); cols = document.getElementById("id_phase_select"); cols.options.length = 0; for(var k in result){ cols.options.add(new Option(k, result[k])); } }, error: function(e){ console.error(JSON.stringify(e)); }, }); }); }); });

3. crea una vista para procesar ajax

 @login_required def get_phases(request): project = request.POST.get('project') phases = {} try: if project: prophases = Project.objects.get(pk=int(project)).phase phases = {pp.phase.title:pp.pk for pp in prophases} except: pass return JsonResponse(data=phases, safe=False)

4. agregue 'get_phases/ a urlpatterns.

Tenga en cuenta que debe modificar algunos códigos según sus necesidades.

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