Search code examples
pythondjangodropdown

Django dropdown is not populated


I want my dropdown to get populated with values from one of my db tables in my Django project, yet it remains blank and I can't figure out why.

This is my html code of my home.html page:

<select name="regions" id="regions">
    {% for item in regions_list %}
    <option val="{{ item.name_reg }}"> {{ item.name_reg }} </option>    
    {% endfor %}
</select>

models.py:

class data_reg(models.Model):
    id = models.AutoField(primary_key=True)
    name_reg = models.TextField(db_column='NAME_REG', blank=True, null=True) 

    class Meta:
        managed = True
        db_table = 'reg'

views.py:

def MyView(request):
    regions_list = RegionChoiceField()

    query_results_dict = {
        'regions_list': regions_list,
    }

    return render(request,'home.html', query_results_dict)

forms.py:

class RegionChoiceField(forms.Form):

    regions = forms.ModelChoiceField(
        queryset=data_immo.objects.values_list("name_reg", flat=True).distinct(),
        empty_label=None
    )

Solution

  • I managed to make it work and did it by avoiding using forms.py. I simply generated my 'regions_list' variable directly in views.py and only after that it managed to get properly recognized. So this is how it finally looked like:

    def MyView(request):
        regions_list = data_immo.objects.values_list("name_reg", flat=True).distinct()
    
        query_results_dict = {
            'regions_list': regions_list,
        }
    
        return render(request,'home.html', query_results_dict)
    

    Also, I amended my html code slightly, as per Ken's suggestion:

    <select name="regions" id="regions">
        {% for item in regions_list %}
        <option val="{{ item.name_reg }}"> {{ item}} </option>    
        {% endfor %}
    </select>