• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

1.4K
Views
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 3 years ago · Santiago Trujillo
1 answers
Answer question

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 3 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 Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error