在使用Django Admin后台时,有时候想自定义某一字段的Choice_field,例如屏蔽某些选项,只显示某些指定的选项。

想象这样的应用场景,我有一个网站,导航栏是这样的:

点开“技术杂谈”后,显示成这样:

在这里,我在后台设计model时,将“技术杂谈”这种显示在导航栏的分类定义成一级分类,将“C/C++”、“Python”这种隐藏在折叠栏中的分类定义成二级分类,二级分类有一个字段存储有链接到对应的父分类的id号。

但这里出现了一个问题,我在后台创建文章时分类选项卡中显示成了这样:

一级分类和二级分类混杂到了一起,而我实际上只希望它显示二级分类。因为当选择“C/C++”、“python”这些二级分类时,会自动归类到对应的一级分类之中,所以没必要在选项卡里显示一级分类。

……

那么问题来了,如何在文章的分类选项卡中屏蔽掉一级分类呢?

我们需要修改文章的Model类,使用 ForeignKey.limit_choices_to 限制分类显示的内容,只显示符合条件的选项。

举个简单的例子,首先创建一个文章类:

class Article(models.Model):
title = models.CharField(max_length=50,verbose_name='文章标题')
content = models.TextField(verbose_name='文章内容')
category = models.ForeignKey(Category,blank=True,null=True,verbose_name='分类')

可以看出,category字段导入了外键Category。我们在ForeignKey函数中设置limit_choices_to参数:

class Article(models.Model):
title = models.CharField(max_length=50,verbose_name='文章标题')
content = models.TextField(verbose_name='文章内容')
category = models.ForeignKey(Category,blank=True,null=True,verbose_name='分类',limit_choices_to={'level':2})

limit_choices_to={'level':2}的意思是只显示分类等级为2的条目,即只显示二级分类。'level'是我在Category中定义的字段,用来代表该分类的等级,一般只有一级和二级。

总的来说,limit_choices_to的作用是设置筛选条件,在admin中只显示筛选后的内容。

设置好这个参数,Django在后台就知道你要选择显示的内容了。

如此,在后台创建文章时就会发现分类表单中只有两个选项。

你也可以根据你的需要,显示你想要显示的选项。当然对其它字段自定义Choice_field也是一样的道理。

ps:一开始使用了choices参数设置显示内容,赋给它一个存储显示内容的元组,但是元组内容一直提示错误,遂查了不少资料,终于在官方文档里找到外键中limit_choices_to的使用方法。

附上ForeignKey.limit_choices_to官方文档链接:ForeignKey.limit_choices_to

  发现Django的中文资料不多呀,官方文档倒是写得很详尽,但是英文文档找起东西来实在费劲。在这里记录下这个问题,以免后人再走弯路。

Django admin 自定义Choice_field的更多相关文章

  1. django admin自定义

    django admin自定义 class CustomerAdmin(admin.ModelAdmin): list_display = ('id','name','qq','consultant' ...

  2. django admin 中实现word文档下载

    为了实现此功能,需要用到的知识点: (1)django  admin  自定义字段:   参考:http://www.cnblogs.com/wumingxiaoyao/p/6928297.html ...

  3. Django实现自定义template页面并在admin site的app模块中加入自定义跳转链接

    在文章 Django实现自定义template页面并在admin site的app模块中加入自定义跳转链接(一) 中我们成功的为/feedback/feedback_stats/路径自定义了使用tem ...

  4. 自定义 Django admin 组件

    摘要:学习 Django admin 组件,仿照源码的逻辑,自定义了一个简易的 stark 组件,实现类似 admin 的功能. 可自动生成 url 路由,对于model 有与之相应的配置类对象,可进 ...

  5. Django之model admin自定义后台管理

    Admin管理界面是django的杀手级应用.它读取你模式中的元数据,然后提供给你一个强大而且可以使用的界面,网站管理者可以用它立即向网站中添加内容. 比如,数据表如下: from django.db ...

  6. Django admin美化插件suit应用[原创]

    前言 由于比较懒,自己弄了一个用户验证,没有自己写后台,用了django自带的user认证,并通过admin直接进行管理,但默认的admin并不漂亮,于是使用了这个django-suit插件,效果对比 ...

  7. Django admin 权威指南(一)

    版本: Django 1.10 此部分由官方文档<6.5.1 The Django admin site>翻译而来. 6.5.1.1 概览 默认情况下,使用startproject的时候, ...

  8. Django admin 显示图片

    我有一个表用来储存轮播图片,有一个 `picture` 字段储存的是图片的url,图片的 url 通过上传文件到 cdn 获得.目前这个表的编辑是通过自定义一个 `ModelForm`,然后重写 Dj ...

  9. Django Admin 简单部署上线

    前言 打算为公司弄一个管理公用密码的平台,由于比较懒,就选择使用Django admin,默认的admin并不漂亮,于是我使用了这个django-suit插件来美化 如图: 是不是比原来的漂亮多了. ...

随机推荐

  1. 网络测试工具 - QCheck

    本片博客内容借鉴51CTO中joyssue博主文章. 网络性能不仅与交换和路由设备的性能相关,而且与线路质量也有很大关系.使用Qcheck可以测试网络性能.这是NetIQ公司开发的一款免费网络测试软件 ...

  2. C#中Key事件

    在键盘按下键然后释放的过程中有3个事件发生,分别为KeyDown事件.KeyPress事件和KeyUp事件. KeyDown和KeyUp事件让应用程序捕捉用户在键盘上按下的特殊键或某些特定键甚至组合键 ...

  3. 反编译安卓apk以及jar包

    https://www.jianshu.com/p/c9b553cf2b51 https://blog.csdn.net/bzlj2912009596/article/details/78268896

  4. NodeJS缓冲区

    NodeJS缓冲区 JavaScript语言本身在I/O时只有字符串数据类型,没有二进制数据类型,但在处理流数据时,必须用到二进制数据,因此在Node中,定义了一个Buffer类作为存放二进制数据的缓 ...

  5. select 多选 (EasyUI)

    <script type="text/javascript" src="/EasyUI/jquery.min.js"></script> ...

  6. python实现关键词提取

    今天我来弄一个简单的关键词提取的代码 文章内容关键词的提取分为三大步: (1) 分词 (2) 去停用词 (3) 关键词提取 分词方法有很多,我这里就选择常用的结巴jieba分词:去停用词,我用了一个停 ...

  7. 【容斥】Four-tuples @山东省第九届省赛 F

    时间限制: 10 Sec 内存限制: 128 MB 题目描述 Given l1,r1,l2,r2,l3,r3,l4,r4, please count the number of four-tuples ...

  8. JAVA自学笔记08

    JAVA自学笔记08 1.构造方法私有,外界就不能再创建对象 2.说明书的制作过程 1)写一个工具类,在同一文件夹下,测试类需要用到工具类,系统将自动编译工具类:工具类的成员方法一般是静态的,因此在测 ...

  9. JAVA自学笔记19

    JAVA自学笔记19 1.集合总结 Collection(单列集合) List(有序可重复) ArrayList:底层数据结构是数组 ,查询快,增删慢.线程不安全,效率高 Vector:底层数据结构是 ...

  10. linux 新建用户、用户组 以及为新用户分配权限(转)

    本文转自https://www.cnblogs.com/clicli/p/5943788.html 感谢作者 Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先 ...