Reputation: 11
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
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