Rudra
Rudra

Reputation: 11

how to filter data in model forms according to fields in form in Django

I am trying to filter data according to selected fields in forms. I have created a model and imported it to forms.py

from django import forms
from django.forms import ModelForm
from .models import Student_Detail, Student_Education
class StudentDetailForm(forms.ModelForm):
   class Meta:
       model = Student_Detail
       fields = ['name', 'surname' , 'sex', 'birth_date', 'area', 
          'state' ,
           'city' , 'pincode']

        def to_python(self, value):

            if not value:
                return []
            return value.split(',')

and my models are

`

from __future__ import unicode_literals
from django.db import models

# Create your models here.
class State(models.Model):
    state = models.CharField(max_length=50)
    slug = models.SlugField(unique=True, null=True, blank=True)

    def __str__(self):
       return self.state


class City(models.Model):
    state = models.ForeignKey('State', on_delete=models.CASCADE)
    city = models.CharField(max_length=70)
    slug = models.SlugField(unique=True, null=True, blank=True)

    def __str__(self):
        return self.city


class Student_Detail(models.Model):

    name = models.CharField(max_length=50)
    surname = models.CharField(max_length=50, blank=True, null=True)
    sex = models.CharField(max_length=4)
    birth_date = models.DateTimeField()
    area = models.CharField(max_length=100, blank=True, null=True)
    state = models.ForeignKey('State', on_delete=models.CASCADE)
    city = models.ForeignKey('City', on_delete=models.CASCADE)
    pincode = models.IntegerField()

    slug = models.SlugField(unique=True, null=True, blank=True)

    def __str__(self):
        return self.name + " " + self.surname`

Now I want to filter cities in form according to a state selected in the same form.

My View is

from django.shortcuts import render
from .models import City, Student_Detail, State, Student_Education
from django.http import HttpResponseRedirect
from .forms import StudentDetailForm, StudentEducationForm


def get_student_data(request):

    if request.method == 'POST':
        form_detail = StudentDetailForm(request.POST)

        if form_detail.is_valid():
            form_detail.save()
            return HttpResponseRedirect('/home/')

    else:
        form_detail = StudentDetailForm()

        return render(request,'home/form.html/', 
        {'form_detail':form_detail, })

def thanks(request):
    template_name = 'home/thanks.html/'

    return render(request, template_name, {})

I am also trying to enter data in two different models using forms but some thing getting wrong while saving data in two different models at view layer. Kindly help.

Upvotes: 0

Views: 772

Answers (1)

naren
naren

Reputation: 15233

Access your form fields like this myForm.fields['name'] and filter Student_Detail

from django.shortcuts import render
from django.http import HttpResponse

def student_view(request):
    # your business logic or whatever goes here
    if form.is_valid():
        students = Student_Detail.objects.filter(name=myForm.fields['name'], 
                                           surname=myForm.fields['surname'])

    return render(request, 'student_view.html', {data=students})

Upvotes: 1

Related Questions