Adding drop down selection to my form and filter

33 views
Skip to first unread message

Patrick Carra

unread,
Dec 4, 2019, 1:12:09 PM12/4/19
to Django users
Hello I am working on adding a drop down selection to my filters so far I am not having any luck. I recently changed my views.py to use a class instead of a def for this.  Now when I use filter.form it shows every field in my models.  It should only show the following fields circuitid, bandwidth, region, carrier, status, segmentname, and mrcnew  and each should be a dynamically generated drop down list from the respective model field only displaying distinct values.  I tried creating my own form with a function that would return these values using choicefield but I can't get this form to come into the template.  A point in the right direction would be much appreciated!

class Circuitinfotable(models.Model):
    id1 = models.IntegerField(blank=True, null=True)
    pid = models.CharField(max_length=255, blank=True, null=True)
    circuitid = models.CharField(primary_key=True,max_length=255, blank=False, null=False)
    bandwidth = models.CharField(max_length=255, blank=True, null=True)
    region = models.CharField(max_length=255, blank=True, null=True)
    bw = models.IntegerField(blank=True, null=True)
    tableaupathname = models.CharField(max_length=255, blank=True, null=True)
    handoffalocaddress = models.CharField(max_length=255, blank=True, null=True)
    handoffaloccity = models.CharField(max_length=255, blank=True, null=True)
    handoffalocst = models.CharField(max_length=255, blank=True, null=True)
    alocationaddress = models.CharField(max_length=255, blank=True, null=True)
    alocationcity = models.CharField(max_length=255, blank=True, null=True)
    alocst = models.CharField(max_length=255, blank=True, null=True)
    handoffzlocaddress = models.CharField(max_length=255, blank=True, null=True)
    carrier = models.CharField(max_length=255, blank=True, null=True)
    handoffzloccity = models.CharField(max_length=255, blank=True, null=True)
    handoffzlocst = models.CharField(max_length=255, blank=True, null=True)
    zlocationaddress = models.CharField(max_length=255, blank=True, null=True)
    zlocationcity = models.CharField(max_length=255, blank=True, null=True)
    zlocst = models.CharField(max_length=255, blank=True, null=True)
    segmentid = models.CharField(max_length=255, blank=True, null=True)
    segmenttype = models.CharField(max_length=255, blank=True, null=True)
    status = models.CharField(max_length=255, blank=True, null=True)
    purpose = models.CharField(max_length=255, blank=True, null=True)
    installdate = models.DateField(blank=True, null=True)
    termdate = models.DateField(blank=True, null=True)
    termlengthmos = models.IntegerField(blank=True, null=True)
    legacy = models.CharField(max_length=255, blank=True, null=True)
    installciopsticket = models.CharField(max_length=255, blank=True, null=True)
    retermciopsticket = models.CharField(max_length=255, blank=True, null=True)
    discociopsticket = models.CharField(max_length=255, blank=True, null=True)
    notes = models.CharField(max_length=255, blank=True, null=True)
    kma = models.CharField(max_length=255, blank=True, null=True)
    group = models.IntegerField(blank=True, null=True)
    cktidkey = models.IntegerField(blank=True, null=True)
    visiolink = models.CharField(max_length=255, blank=True, null=True)
    latestjiraticket = models.CharField(max_length=255, blank=True, null=True)
    disconnectdate = models.DateField(blank=True, null=True)
    segmentname = models.CharField(max_length=255, blank=True, null=True)
    mrcnew = models.TextField(blank=True, null=True)  # This field type is a guess.
    termyrs = models.IntegerField(blank=True, null=True)
    monthbudget = models.IntegerField(blank=True, null=True)
    monthdisco = models.IntegerField(blank=True, null=True)
    mrcold = models.TextField(blank=True, null=True)  # This field type is a guess.
    kmz = models.CharField(max_length=255, blank=True, null=True)

    def __str__(self):
        return self

    class Meta:
        managed = False
        db_table = 'circuitinfotable'



My filter.py code is below:

from .models import Circuitinfotable
from .forms import CircuitForm
import django_filters

class CircuitInfoFilter(django_filters.FilterSet.form):
    class Meta:
        model=Circuitinfotable
        #fields = ['circuitid', 'bandwidth', 'region', 'carrier', 'status', 'segmentname', 'mrcnew']
        form=CircuitForm


My forms.py is below:
from django import forms
from .models import Circuitinfotable

def getList(item_list, keyValue):
    valueList=[]
    for each in item_list:
        valueList.append(each[keyValue])
    return valueList

class CircuitForm(forms.Form):
    class Meta:
        model = Circuitinfotable
        fields = ('circuitid', 'bandwidth', 'region', 'carrier', 'status', 'segmentname', 'mrcnew')
        region_dict=Circuitinfotable.objects.values('region').distinct('region')

        def __init__(self, *args, **kwargs):
            super(CircuitForm, self).__init__(*args, **kwargs)
            self.fields['region'].queryset = forms.ChoiceField(getList(region_dict, 'region'))
            self.fields['bandwidth'].queryset = Bandwidth.objects.none()
            self.fields['circuitid'].queryset = Circuitid.objects.none()
            self.fields['carrier'].queryset = Carrier.objects.none()
            self.fields['status'].queryset = Status.objects.none()
            self.fields['segmentname'].queryset = Segmentname.objects.none()
            self.fields['mrcnew'].queryset = Mrcnew.objects.none()

my views.py is below:
Enter code here...from django.shortcuts import render
from django.http import HttpResponse
from django.views.generic import TemplateView, ListView
from django.http import HttpResponseRedirect
from django_filters.views import FilterView

from .models import Circuitinfotable
from .filters import CircuitInfoFilter
from .forms import CircuitForm
import re

# Create your views here.

class search(FilterView):
    model = Circuitinfotable
    filter_class = CircuitInfoFilter
    form_class = CircuitForm

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        return context


and my template looks like this:
Enter code here...<html>
<head>
<meta charset="UTF-8">
<title>Circuits</title>
<style>
h1 {
color:blue;
}
h4 {
color:red;
}
.tabledata {
  background: #395870; color:#fff;
}
.tablerow:nth-child(even) {
  background-color: #f2f2f2;
}
.form{
  width:100%;
}
.field {
  background: #white; float: left; margin: 1%; width: 200;
}
</style>
{% extends 'ciopsNavbar.html' %}
{% block content %}
<div style="position: relative; top: 60px;">
  <form method="get">
    {{ filter.form.as_table }}
    <button type="submit">Search</button>
    <a href="/searchlit/customsearch/">
    <input type="button" value="Clear" /></a>
  </form>
</div>
<body>
<p>{{ filter.qs.count }} circuits returned</p>
<div>
  <table style="width:100%">
    <thead class="tabledata">
      <tr>
        <th>View</th>
        <th>CircuitID</th>
        <th>Bandwidth</th>
        <th>Region</th>
        <th>Carrier</th>
        <th>Status</th>
        <th>Segmentname</th>
        <th>MRC</th>
      </tr>
    </thead>
    <tbody>
    {% for circuit in object_list %}
    <tr class="tablerow">
      <td class="actions">
          <a href="/viewLit/{{ circuit.circuitid }}" target="_blank" class="view-item" title="View">View</a>
      </td>
      <td>{{ circuit.circuitid }}</td>
      <td>{{ circuit.bandwidth }}</td>
      <td>{{ circuit.region }}</td>
      <td>{{ circuit.carrier }}</td>
      <td>{{ circuit.status }}</td>
      <td>{{ circuit.segmentname }}</td>
      <td>{{ circuit.mrcnew }}</td>
    </tr>
    {% endfor %}
    </tbody>
  </table>
</div>
</body>
</div>
{% endblock %}
</html>



Reply all
Reply to author
Forward
0 new messages