我们在定义模型字段时,如果有字段的值是由我们提供给用户选择的,那么此时我们可以为字段 提供choice字段选项,

序列本身由正好两个项目的迭代项组成(例如 [(A,B),(A,B)...] ),所以我们可以用序列作为choice的选择。如下定义的模型类:

from django.db import models


class Student(models.Model):
    name = models.CharField(max_length=10, blank=True, null=True)
    Gender = [
        (0, 'man'),
        (1, 'woman')
    ]
    gender = models.SmallIntegerField(default=0, verbose_name='性别', choices=Gender)

 性别字段使用了自定义的选择项,并且默认值为0,即为man

一、choice作用于modelform

1、定义student.html模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>学生信息</title>
</head>
<body>
    <div>
        <form action="" method="post">
            {% for filed in form %}
                <label for="{{ filed.id_for_label }}">{{ filed.name }}:</label>
                {{ filed }}
            {% endfor %}

        </form>
    </div>
</body>
</html>

2、定义StudentForm和StuentView

from django.shortcuts import render
from django import forms
from django.views import View

from modelapp.models import Student


# Create your views here.


class StudentForm(forms.ModelForm):
    class Meta:
        model = Student
        fields = '__all__'


class StudentView(View):
    def get(self, request):
        form = StudentForm()
        return render(request, 'student.html', locals())

如图、该网页为通过modelForm表单渲染出来的,其中的gender选项,就是由我们自己提供的选项。

 二、通过get_foo_display()方法获取choice字段当前值的索引名称

1、已有的表记录

 2、get_foo_display()获取索引值

对于每一个设置了choice的字段,该模型对象将有一个get_foo_display()方法,其中FOO是字段的名称。该方法返回字段的“序列中索引”值。

import django
import sys
import os

# 获取当前项目的根路径
base_path = os.path.basename(os.path.basename(os.path.abspath(__file__)))

# 将当前项目的根路径添加到系统路径中
sys.path.insert(0, base_path)

# 配置当前项目的配置文件添加到环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'testdjango.settings')
# 读取环境变量中的配置文件
django.setup()

from modelapp.models import Student

stu = Student.objects.get(id=1)
print(stu.gender)  # 1
print(stu.name)  # python 
print(stu.get_gender_display())  # woman

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐