返回信息流最近想做一个语料标注的后台,包含用户权限,就选择了django自带的admin模块来开发。遇到了一个问题,查了官方文档和google,没怎么看懂。求问论坛大神~~
每条文本有两个类别标注,类别是包含关系,分为一级和二级类目,想做到标注时,勾选一级类目后,二级的下拉候选项只给当前一级类目下的。是要用Forms,Fileds类还是要用ChoiceField类?
现在图示是:
上代码清楚一些:
【models.py】
```python
from django.db import models
# Create your models here.
TAGS = {
"教育成长": ["校园教育", "家庭教育", "社会教育", "考研出国", "校园生活"],
"社团生活": ["社团组织", "学生组织", "公益活动", "志愿服务", "社会实践"],
}
class YouthForumData(models.Model):
question_text = models.TextField()
pub_date = models.DateTimeField('date published')
FIRST_TAGS = [(k, k) for k in TAGS] + [('unknown', 'unknown')]
SECOND_TAGS = [(k, [
[v, v] for v in val
]) for k, val in TAGS.items()] + [('unknown', 'unknown')]
first_class = models.CharField(
max_length=20, choices=FIRST_TAGS, default='unknown')
second_class = models.CharField(
max_length=20, choices=SECOND_TAGS, default='unknown')
def was_tagged_manually(self):
return 'unknown' not in [self.first_class, self.second_class]
was_tagged_manually.admin_order_field = 'pub_date'
was_tagged_manually.boolean = True
was_tagged_manually.short_description = 'already tagged?'
def __str__(self):
return self.question_text
```
【admin.py】
```python
class YouthForumDataAdmin(admin.ModelAdmin):
# 定义列表页显示元数据字段
list_display = ('question_text', 'first_class', 'second_class',
'was_tagged_manually')
# 定义可链接元数据字段
list_display_links = ('question_text', )
# 定义再列表页可编辑字段
list_editable = ('first_class', 'second_class')
# 定义列表页右侧过滤字段
list_filter = ['first_class',]
# 列表页每页显示数据量
list_per_page = 15
# 定义列表页搜索候选元数据
search_fields = ['question_text',]
```
这是一条镜像帖。来源:北邮人论坛 / python / #18575同步于 2017/8/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
【问题django】如何让admin里的两个下拉栏选项耦合起来
KillerDeath
2017/8/7镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
1.这两个级别的东西存在两张表里
2.选择第一个下拉框触发onchange事件,发送Ajax.
3.根据第一个下拉框选择的项,查数据库第二个表
4.根据查找数据渲染第二个下拉框
【 在 Zelda 的大作中提到: 】
: 这种情况是model设计不符合3NF吧……
可能也是有这部分原因,只是想借用django的admin模块进行开发。
不过最后又查了查google,有开源的实现了这个,可以无缝接入admin模块:Django Smart Selects
github地址:https://github.com/digi604/django-smart-selects
【 在 buptxiaomiao 的大作中提到: 】
: 1.这两个级别的东西存在两张表里
: 2.选择第一个下拉框触发onchange事件,发送Ajax.
: 3.根据第一个下拉框选择的项,查数据库第二个表
: ...................
是的,可以这么做的。
不过,我是前端小白,所以倾向于如何借助后台model对外键的使用来实现。最后发现了神奇的东西:django-smart-selects
直接在后台model里定义数据表之间的外键关系即可,admin模块可以自动加载js和css帮你再页面渲染好
厉害了 我也是前端小白...
pip可以不可直接安装
【 在 KillerDeath (KillerDeath) 的大作中提到: 】
: 是的,可以这么做的。
: 不过,我是前端小白,所以倾向于如何借助后台model对外键的使用来实现。最后发现了神奇的东西:django-smart-selects
: ...................
可以,直接pip install
【 在 buptxiaomiao (吃藕吃藕equal丑丑) 的大作中提到: 】
: 厉害了 我也是前端小白...
: pip可以不可直接安装
等你明天看看源码
希望不要太臃肿...
【 在 KillerDeath (KillerDeath) 的大作中提到: 】
: 可以,直接pip install
其实这跟django本身没太大关系,用django调用Jquery来制作二级联动下拉框,把js文件和模板啥的放在指定目录,配好框架中的urls.py啥的,让jquery可以被django成功调用就行。晚上网上找个模板,改改,最多涉及数据库调用,用python调就行。
羡慕会前端的大神呐
【 在 xdx (heihei) 的大作中提到: 】
: 其实这跟django本身没太大关系,用django调用Jquery来制作二级联动下拉框,把js文件和模板啥的放在指定目录,配好框架中的urls.py啥的,让jquery可以被django成功调用就行。晚上网上找个模板,改改,最多涉及数据库调用,用python调就行。