[Django]-Django โ€“ Create a dropdown list from database

8๐Ÿ‘

I managed to create a drop down box using distinct values from a column in a model. In case someone is looking for an answer:

models.py:

class SensorsTable(models.Model):
    sensor_uuid = models.CharField(primary_key=True, max_length=32)
    sensor_desc = models.CharField(max_length=256)
    sensor_mid = models.CharField(max_length=256)
    gw_uuid = models.CharField(max_length=32, blank=True, null=True)
    sensor_loc_lat = models.DecimalField(max_digits=11, decimal_places=8, blank=True, null=True)
    sensor_loc_long = models.DecimalField(max_digits=11, decimal_places=8, blank=True, null=True)
    sensor_loc_blg = models.CharField(max_length=100, blank=True, null=True)
    sensor_loc_room = models.CharField(max_length=100, blank=True, null=True)
    sensor_loc_position = models.CharField(max_length=100, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'sensors_table'

    def __str__(self):
        return self.sensor_uuid

forms.py

from django import forms
from .models import *


class LocationChoiceField(forms.Form):

    locations = forms.ModelChoiceField(
        queryset=SensorsTable.objects.values_list("sensor_loc_blg", flat=True).distinct(),
        empty_label=None
    )

views.py (most simple way)

from django.http import HttpResponse
from django.template import loader
from django.shortcuts import render
from django.views.generic.edit import CreateView
from .forms import *

from .models import *



def index(request):
    query_results = SensorsTable.objects.all()
    location_list = LocationChoiceField()

    context = {
        'query_results': query_results,
        'location_list': location_list,

    }
    return render(request,'analytics/index.html', context)

index.html

<body>

<div class="container">
    <p></p>
    <form method=POST action="">
        {{ location_list }}
    </form>



    <h1>All sensors</h1>
    <table>

        {% for item in query_results %}
        <tr>
            <td>{{ item.sensor_uuid }}</td>
            <td>{{ item.sensor_desc }}</td>
            <td>{{ item.sensor_mid }}</td>
            <td>{{ item.gw_uuid }}</td>
            <td>{{ item.sensor_loc_blg }}</td>
            <td>{{ item.sensor_loc_room }}</td>
            <td>{{ item.sensor_loc_position }}</td>
        </tr>
        {% endfor %}
    </table>
</div>
</body>

Leave a comment