基于 Django1.10 文档的深入学习(8)—— Model field reference 之 choices

choices

Field.choices

一个包含两个项目(例如[(A,B),(A,B)...])的可迭代的迭代(例如,列表或元组))用作该字段的选择。 如果给出这一点,默认窗体小部件将是一个带有这些选项而不是标准文本字段的选择框。

每个元组中的第一个元素是要在模型上设置的实际值,第二个元素是可读的名称。 例如:

YEAR_IN_SCHOOL_CHOICES = (
    ('FR', 'Freshman'),
    ('SO', 'Sophomore'),
    ('JR', 'Junior'),
    ('SR', 'Senior'),
)

通常,最好在模型类中定义选项,并为每个值定义一个适当命名的常量:

from django.db import models

class Student(models.Model):
    FRESHMAN = 'FR'
    SOPHOMORE = 'SO'
    JUNIOR = 'JR'
    SENIOR = 'SR'
    YEAR_IN_SCHOOL_CHOICES = (
        (FRESHMAN, 'Freshman'),
        (SOPHOMORE, 'Sophomore'),
        (JUNIOR, 'Junior'),
        (SENIOR, 'Senior'),
    )
    year_in_school = models.CharField(
        max_length=2,
        choices=YEAR_IN_SCHOOL_CHOICES,
        default=FRESHMAN,
    )

    def is_upperclass(self):
        return self.year_in_school in (self.JUNIOR, self.SENIOR)

虽然您可以在模型类之外定义选择列表,然后引用它,但是为模型类中的每个选项定义选项和名称将使所有这些信息与使用它的类保持一致,并使选择容易引用( 例如,Student.SOPHOMORE将在导入学生模型的任何地方工作)。

对于具有选择集的每个模型字段,Django将添加一个方法来检索字段当前值的可读名称。 请参阅数据库API文档中的get_FOO_display()

请注意,选择可以是任何可迭代对象 - 不一定是列表或元组。 这使您可以动态构建选择。 但是,如果您发现自己的黑客选择是动态的,那么您可能会更好地使用具有ForeignKey的正确数据库表。 选择适用于静态数据,如果有的话,这些数据并不会变化很大。

除非 blank= False与字段一起设置,否则将使用选择框呈现包含“———”的标签。 要覆盖此行为,请在包含None的选项中添加一个元组; 例如 (无,“您的显示字符串”)。 或者,您可以使用空字符串而不是None,这样就有意义 - 例如在CharField上。

这里写图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设计思路: 1. 确定系统需求:根据用户需求,确定系统的主要功能和特点。 2. 设计数据库:根据系统需求,设计数据库结构,包括文档信息、用户信息、上传记录等表。 3. 搭建Django框架:在Django框架中创建项目,建立应用程序。 4. 实现用户认证:使用Django自带的用户认证系统,实现用户登录注册等功能。 5. 实现文档上传功能:用户登录后可以上传文档,上传的文档可以保存到服务器上。 6. 实现文档浏览和下载功能:用户可以浏览已上传的文档,并且可以下载文档。 7. 实现文档管理功能:管理员可以对上传的文档进行管理,包括删除、修改等操作。 8. 实现权限控制功能:控制用户上传文档的权限,并且管理员可以对用户权限进行控制。 9. 实现搜索功能:用户可以通过关键字搜索已上传的文档。 10. 实现邮件提醒功能:用户上传文档后,系统会自动发送邮件提醒。 11. 实现日志管理功能:记录用户上传、下载、浏览文档等操作,管理员可以查看日志信息。 技术选型: 1. Django框架:基于Python语言开发,具有快速开发、高效、安全等特点。 2. MySQL数据库:开源免费、性能稳定、可靠性高等特点。 3. Bootstrap框架:基于HTML、CSS和JavaScript的前端框架,可以快速搭建用户界面。 4. jQuery库:简化JavaScript操作,提高开发效率。 5. Celery:异步任务处理框架,用于邮件发送功能。 6. Redis:高性能内存数据库,用于缓存等功能。 7. Nginx:高性能Web服务器,用于反向代理、负载均衡等功能。 以上是基于Django框架的在线文档上传系统的大致设计思路和技术选型。具体实现过程中,还需要根据需求进行细节调整和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值