在使用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. (转)JavaWeb学习之Servlet(二)----Servlet的生命周期、继承结构、修改Servlet模板

    [声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140466.html 一.http协议回顾: 在上一篇文章中:JavaW ...

  2. Three.js里自定义顶点构建三角形面的朝向问题

    如上图所示,一个矩形可以由两个三角形组成 2 1 0 为朝向摄像机的方向显示 1 2 3 为朝向摄像机的方向显示

  3. Java 接口 Comparable

    compareTo方法是Comparable接口中唯一的方法.类实现了该接口后表明它的实例具有内在的排序关系.当该对象小于.等于或大于指定对象的时候,分别返回一个负整数.0或者正整数.如果由于指定对象 ...

  4. MySQL解压版的安装与配置

    1.解压mysql-5.7.15-winx64.zip到D:\MySQL Server 5.7(你想安装的位置) 2.如果机器上安装过其他版本的mysql先删除环境变量PATH中的mysql路径,然后 ...

  5. Hibernate(1)基本知识

    hibernate初步 1.概述 ①hibernate是java应用和关系数据库之间的桥梁,是一个开源的对象关系映射框架,可用来把对象模型表示的java对象 映射到关系型数据库表中去. ②hibern ...

  6. CentOS下双网卡双IP不同IP段配置

    环境: eth0:10.0.7.2  gw :10.0.7.254 netmask:255.255.255.0 eth1:168.6.101.2    gw :168.6.101.254    net ...

  7. C#实战技能之WebApi+Task+WebSocket

    一.背景介绍 环境的局限性: 用户在使用XX客户端的时候,必须每台电脑都安装打印组件,同时由于XX客户端使用的是 websocket进行通讯,这就必须限制用户的电脑浏览器必须是IE10.0+以上版本, ...

  8. 用css实现自定义虚线边框

    开发产品功能的时候ui往往会给出虚线边框的效果图,于是乎,我们往往第一时间想到的是用css里的border,可是border里一般就提供两种效果,dashed或者dotted,ui这时就不满意了,说虚 ...

  9. 已安装nginx动态添加模块

    说明:已经安装好的nginx,需要添加一个未被编译安装的模块,需要怎么弄呢? 具体:这里以安装第三方ngx_http_google_filter_module模块为例nginx的模块是需要重新编译ng ...

  10. 初始化bootstrap treeview树节点

    最近在做启明星图库时,使用了Jquery Bootstrap  Treeview插件.但是,遇到了一个初始化的问题.先看效果如下: 当用户打开图库时,左边分类第一个类别是“所有分类”,默认需要选中. ...