Search code examples
djangopython-3.xdjango-modelsdjango-formsdjango-smart-selects

Django smart_selects chained field coming up empty


I am trying to implement chained dropdown list using Django smart_selects. But its not working as expected. After selecting the first dropdown, the second dropdown is not populating.

model.py:

class ServerInfo(models.Model):
    server = models.CharField(max_length=255, verbose_name='Server')
    def __str__(self):
       return self.server

class Database(models.Model):
    database = models.CharField(max_length=255, verbose_name='Database')
    server = models.ForeignKey(ServerInfo,related_name='database', on_delete=models.CASCADE)
    def __str__(self):
       return self.database

class Tables(models.Model):
    table = models.CharField(max_length=255, verbose_name='Table')
    database = models.ForeignKey(Database,related_name='table', on_delete=models.CASCADE)
    def __str__(self):
       return self.table

class TransferJob(models.Model): 
    source_server = models.ForeignKey(ServerInfo, related_name='source_server', verbose_name='Source Server', on_delete=models.CASCADE)
    source_db = ChainedForeignKey(
        Database,
        chained_field="source_server",
        chained_model_field="server",
        show_all=False,
        auto_choose=True,
        sort=True)  
source_table = models.ForeignKey(Tables, related_name='source_table',on_delete=models.CASCADE, verbose_name='Source Table')

    dest_server = models.ForeignKey(ServerInfo, related_name='destination_server', verbose_name='Destination Server', on_delete=models.CASCADE)
    dest_db = models.ForeignKey(Database, related_name='destination_database', verbose_name='Destination Database', on_delete=models.CASCADE)

Update: I just realised that this is working as expected in the django admin. But how do I use this outside the admin?


Solution

  • Was able to solve this by adding these scripts in template:

        <script type="text/javascript" src="{% static '/smart-selects/admin/js/chainedfk.js' %}"></script>
        <script type="text/javascript" src="{% static '/smart-selects/admin/js/bindfields.js' %}"></script>
    

    There was no mention about these in docs.