在 Django 视图中提交表单时如何获取下拉选择的值而不是文本?
how to get dropdown selected value and not text while submitting form in django views?
i have a dropdown list which you can see on left side. i want to fetch the value of dropdown in my views.py but when i cleaned_data['city'] it gives me the text of the selected value and not the value . how can i get this? can anyone help me
models.py
from django.db import models
from .validator import validate_age
# Create your models here.
class City(models.Model):
city_name=models.CharField(max_length=200)
def __str__(self):
return self.city_name
class Employee(models.Model):
name = models.CharField(max_length=200)
pan_number = models.CharField(max_length=200, unique=True, null=False, blank=False)
age = models.IntegerField(validators=[validate_age])
gender = models.CharField(max_length=10)
email = models.EmailField()
city = models.ForeignKey(City, on_delete=models.DO_NOTHING)
def __str__(self):
return self.name
def clean(self):
if self.name:
self.name =self.name.strip()
views.py
def employee(request):
context = {}
if request.POST:
form = EmployeeForm(request.POST)
if form.is_valid():
name = form.cleaned_data['name']
pan_number = form.cleaned_data['pan_number']
email = form.cleaned_data['email']
age = form.cleaned_data['age']
city = form.cleaned_data['city']
gender = form.cleaned_data['gender']
print(city)
with connection.cursor() as cursor:
cursor.callproc('insert_employee', [name, pan_number, age, gender, email, city])
# qs_add = Employee(name=name, pan_number=pan_number, email=email, age=age, city=city, gender=gender)
# qs_add.save()
messages.add_message(request, messages.INFO, 'Employee save successfully')
context['form'] = context['form'] = EmployeeForm()
else:
context['form'] = EmployeeForm(request.POST)
else:
context['form'] = EmployeeForm()
return render(request, 'app/employee.html', context)
在您的模型 Employee
中,字段 city
是一个 ForeignKey
,其默认表单字段是 ModelChoiceField
[Django docs]。此表单字段规范化为 模型实例 。假设您不使用其他表单域,您得到的不是选择文本,而是 City
的一个实例。因此,您可以简单地编写 city.id
或 city.pk
来获取您想要的 id,或者您可以简单地编写以下内容:
city = form.cleaned_data['city'].pk
也不需要调用一些程序来插入值(除非出于某种原因你真的想节省带宽),假设你使用 ModelForm
你可以简单地写下面的代码来保存员工数据库:
employee = form.save()
i have a dropdown list which you can see on left side. i want to fetch the value of dropdown in my views.py but when i cleaned_data['city'] it gives me the text of the selected value and not the value . how can i get this? can anyone help me
models.py
from django.db import models
from .validator import validate_age
# Create your models here.
class City(models.Model):
city_name=models.CharField(max_length=200)
def __str__(self):
return self.city_name
class Employee(models.Model):
name = models.CharField(max_length=200)
pan_number = models.CharField(max_length=200, unique=True, null=False, blank=False)
age = models.IntegerField(validators=[validate_age])
gender = models.CharField(max_length=10)
email = models.EmailField()
city = models.ForeignKey(City, on_delete=models.DO_NOTHING)
def __str__(self):
return self.name
def clean(self):
if self.name:
self.name =self.name.strip()
views.py
def employee(request):
context = {}
if request.POST:
form = EmployeeForm(request.POST)
if form.is_valid():
name = form.cleaned_data['name']
pan_number = form.cleaned_data['pan_number']
email = form.cleaned_data['email']
age = form.cleaned_data['age']
city = form.cleaned_data['city']
gender = form.cleaned_data['gender']
print(city)
with connection.cursor() as cursor:
cursor.callproc('insert_employee', [name, pan_number, age, gender, email, city])
# qs_add = Employee(name=name, pan_number=pan_number, email=email, age=age, city=city, gender=gender)
# qs_add.save()
messages.add_message(request, messages.INFO, 'Employee save successfully')
context['form'] = context['form'] = EmployeeForm()
else:
context['form'] = EmployeeForm(request.POST)
else:
context['form'] = EmployeeForm()
return render(request, 'app/employee.html', context)
在您的模型 Employee
中,字段 city
是一个 ForeignKey
,其默认表单字段是 ModelChoiceField
[Django docs]。此表单字段规范化为 模型实例 。假设您不使用其他表单域,您得到的不是选择文本,而是 City
的一个实例。因此,您可以简单地编写 city.id
或 city.pk
来获取您想要的 id,或者您可以简单地编写以下内容:
city = form.cleaned_data['city'].pk
也不需要调用一些程序来插入值(除非出于某种原因你真的想节省带宽),假设你使用 ModelForm
你可以简单地写下面的代码来保存员工数据库:
employee = form.save()