How to use django-autocomplete-light and django-hacker to make a chained dropdown in django admin?

126 Views Asked by At

I have 3 models 1) university 2) courses and 3) enquiry.

My enquiry model has a foreign key to "course". And Course has a foreign key to the university. I only want to show the courses related to that university while adding an enquiry. I tried django-smart-select but failed to do so. I tried This answer but I dont understand the logic and failed to implement in my project.

this is my models.py file

class university(models.Model):

    univ_name = models.CharField(max_length=100)
    country = CountryField(blank=True, null=True)
    univ_desc = models.CharField(max_length=1000)
    univ_logo = models.ImageField(upload_to="media")
    univ_phone = models.CharField(max_length=10, blank=True)
    univ_email = models.EmailField(max_length=254, blank=True)
    univ_website = models.URLField(blank=True)
    assigned_users = models.ForeignKey(get_user_model(), on_delete=models.CASCADE, default="")

    def __str__(self):
        return self.univ_name

    class Meta:
        verbose_name_plural = "Universities"


class Course(models.Model):

    university = models.ForeignKey(university, on_delete=models.CASCADE)
    course_name = models.CharField(max_length=100)
    course_levels = models.ForeignKey(course_levels, on_delete=models.CASCADE)
    intake = models.ForeignKey(intake, on_delete=models.CASCADE)
    documents_required = models.ForeignKey(documents_required, on_delete=models.CASCADE)
    course_requirements = models.ForeignKey(course_requirements, on_delete=models.CASCADE)
    Active = models.BooleanField()

    def __str__(self):
        return self.course_name



class enquiry(models.Model):

    student_name = models.CharField(max_length=100)
    student_phone = models.CharField(max_length=10)
    student_email = models.EmailField()
    student_address = models.TextField()
    current_education = models.ForeignKey(current_education, on_delete=models.CASCADE)
    country_interested = CountryField(blank=True, null=True)
    university_interested = models.ForeignKey(university, on_delete=models.CASCADE)
    course_interested = models.ForeignKey(Course, on_delete=models.CASCADE, limit_choices_to={'Active':True})
    level_applying_for = models.ForeignKey(course_levels, on_delete=models.CASCADE)
    intake_interested = models.ForeignKey(intake, on_delete=models.CASCADE)
    assigned_users = models.ForeignKey(User, on_delete=models.CASCADE, default="", limit_choices_to={"is_active": True})
    enquiry_status = models.ForeignKey(enquiry_status, on_delete=models.CASCADE, default="")

    course_interested= ChainedForeignKey(Course,chained_field= 'university_interested',chained_model_field= 'university',show_all= False,auto_choose= True,sort=True,limit_choices_to = {"Active": True},)

I want to show the course_interested field related to that university. Need help.

I tried using django-smart-select but failed to implement it. I am not aware of jquery and ajax so that is out of the question to use in my project.

1

There are 1 best solutions below

0
On

got the solution I used the django-select2 and was able to solve this issue.