在 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.idcity.pk 来获取您想要的 id,或者您可以简单地编写以下内容:

city = form.cleaned_data['city'].pk

也不需要调用一些程序来插入值(除非出于某种原因你真的想节省带宽),假设你使用 ModelForm 你可以简单地写下面的代码来保存员工数据库:

employee = form.save()