首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >包含大型关联表的Django管理list_filter ForeignKey

包含大型关联表的Django管理list_filter ForeignKey
EN

Stack Overflow用户
提问于 2017-09-11 07:54:56
回答 2查看 2.3K关注 0票数 3

我有这样的模型:

代码语言:javascript
运行
AI代码解释
复制
class Post(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    title = models.CharField()
    user = models.ForeignKey('users.User')

这个ModelAdmin:

代码语言:javascript
运行
AI代码解释
复制
class PostAdmin(admin.ModelAdmin):
    list_display = ['title', 'user']
    list_filter = ['user']

过滤效果很好,但我也面临着这样的问题。在我的例子中,users.User表非常大,所以当Django呈现PostAdmin页面时,呈现所有用户需要花费太多的时间。

因此,我想知道是否可以在ForeignKey中使用Django管理过滤器而不呈现所有相关对象,比如过滤器的raw_id_fields小部件?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-27 19:23:16

我刚刚发现,https://github.com/lincolnloop/django-salmonella看起来像这样为任何FK提供了一个原始的id过滤器。

# pip install django-salmonella

代码语言:javascript
运行
AI代码解释
复制
from salmonella.admin import SalmonellaMixin
from salmonella.filters import SalmonellaFilter

class UserProfileAdmin(SalmonellaMixin, admin.ModelAdmin):
   list_filter = (
       ('salmonella_fk', SalmonellaFilter),
   )

您还可以清理grapelli fields-django-salmonella-and-django-grappelli/的样式。

app/templates/salmonella/admin/widgets/salmonella_field.html

代码语言:javascript
运行
AI代码解释
复制
{{ hidden_input }}
<a onclick="return showRelatedObjectLookupPopup(this);" id="lookup_id_{{ name }}" data-name="{{ name }}" data-app="{{ app_name }}" data-model="{{ model_name }}" class="related-lookup" href="{{ related_url }}{{ url }}"><img width="16" height="16" alt="Consultazione" src="/static/admin/img/selector-search.gif"></a>
<a data-name="developers" data-app="{{ app_name }}" data-model="{{ model_name }}" class="salmonella-clear-field"></a>
<span class="salmonella_label" id="{{ name }}_salmonella_label"></span>

app/templates/salmonella/multi_label.html

代码语言:javascript
运行
AI代码解释
复制
{% for object in objects %}
    <a href="{{ object.1 }}" >{{ object.0 }}</a>{% if not forloop.last %} {% endif %}
{% endfor %}

和一份样式表:

代码语言:javascript
运行
AI代码解释
复制
.salmonella-clear-field {
    background-image: url("/static/grappelli/images/icons/related-remove.png");
    background-repeat: no-repeat;
    background-position: center center;
    display: inline-block;
    position: relative;
    top: 5px;
    margin: 0 5px 0 10px;
    height: 15px;
    width: 15px;
    cursor: pointer;
}
.salmonella_label {
    position: inline-block;
    position: relative;
    top: 2px;
}
.salmonella_label a {
    background: #fff;
    padding: 2px 5px;
}
票数 1
EN

Stack Overflow用户

发布于 2017-09-11 08:24:19

我能够找到的最好的解决方案是使用raw_id_field小部件定制过滤器。

创建模板user_filter.html

代码语言:javascript
运行
AI代码解释
复制
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'admin/css/forms.css' %}"/>
<script type="text/javascript">var go_from_select = function(opt) { window.location = window.location.pathname + opt };</script>
<h3>{{ title }}</h3>
<div class="admin-filter-user" style="margin-left:15px">
    <input type="text" style="display:inline-block;" name="{{title}}" value="{{ request.GET.user__id__exact }}" id="id_{{title}}" class="vForeignKeyRawIdAdminField"/>
    <a href="{% url 'admin:users_user_changelist' %}" class="related-lookup" style="display:inline-block;" id="lookup_id_{{title}}" title="Lookup"></a>
    <input type="button" onclick="go_from_select('?user__id__exact='+id_user.value)" value="Filter" />
    <a href="#" style="display:inline-block; margin-left:7px" onclick="go_from_select('')">clear</a>
</div>

创建新的过滤器类并覆盖默认模板:

代码语言:javascript
运行
AI代码解释
复制
class UserFilter(admin.RelatedFieldListFilter):
    """Raw_id_filter for user field"""
    template = 'admin/user_filter.html'

UserFilter设置为ModelAdmin中用户字段的筛选类

代码语言:javascript
运行
AI代码解释
复制
class PostAdmin(admin.ModelAdmin):
    list_display = ['title', 'user']
    list_filter = [('user', UserFilter)]

这将为raw_id_field过滤器设置user小部件,并提高页面呈现性能。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46159733

复制
相关文章
超越村后端开发(2:新建models.py+xadmin的引入)
1.新建Model 1.users数据 1.在apps/users/models.py中: from datetime import datetime from django.db import models from django.contrib.auth.models import AbstractUser # Create your models here. class UserProfile(AbstractUser): """ 管理员 """ name=mod
玩蛇的胖纸
2019/04/09
5100
超越村后端开发(2:新建models.py+xadmin的引入)
django-ForeignKey,OneToOneField,ManyToManyField
进入到django自带的related.py中,可以看到 1.ForeignKey 初始化的参数有: to, on_delete, related_name=None, related_query_name=None,limit_choices_to=None, parent_link=False, to_field=None, db_constraint=True, **kwargs 假设我们有: class Author(models.Model): author = models.Char
西西嘛呦
2020/08/26
7210
django Foreignkey 之 on_delete
on_delete 指的是通过 ForeignKey 连接起来的当前对象被删除后,外键字段进行的操作。
卓越笔记
2023/02/18
2530
Django基础篇-表关联对象
可以在项目目录下通过 python manage.py shell 进入到当前目录下的 python 的 idle。
小团子
2019/07/18
1.3K0
Django基础篇-表关联对象
Django教程 —— 初步完善图书管理系统
我们写项目写东西的时候都要养成良好的习惯,不要一来就上手写代码,我们先要进行初步分析和设计,让大脑有整体的概念,需要用到什么技术实现什么效果。这个习惯也不能学的太死,我们要活学活用,学会变通。有时候只是简单的学习一下,或者简单的实现一个小功能。大脑已经可以大概掌握,就无须设计与分析。
忆想不到的晖
2021/09/29
5500
Django教程 —— 初步完善图书管理系统
Django教程 —— 初步完善图书管理系统
我们写项目写东西的时候都要养成良好的习惯,不要一来就上手写代码,我们先要进行初步分析和设计,让大脑有整体的概念,需要用到什么技术实现什么效果。这个习惯也不能学的太死,我们要活学活用,学会变通。有时候只是简单的学习一下,或者简单的实现一个小功能。大脑已经可以大概掌握,就无须设计与分析。
忆想不到的晖
2020/11/06
1K0
Django开发在线教育平台--学习整理(一)
首先,打开cmd,cd到存放django项目的文件夹,创建一个新工程(也可以用虚拟环境virtualenv):
SimonDM
2018/05/09
3K4
Django开发在线教育平台--学习整理(一)
django admin list_filter 显示外键字段
models.py class Node(models.Model): """ 节点表 """ name = models.CharField(max_length=128, unique=True, verbose_name="节点名称") # SlugField 是一个新闻术语(通常叫做短标题)。一个slug只能包含字母、数字、下划线或者是连字符,通常用来作为短标签。通常它们是用来放在地址栏的URL里的。 # 像CharField一样,你可以指定max_
卓越笔记
2023/02/18
9990
Django入门案例:图书管理系统
无需写sql,不需写前端,利用Django自带的Admin和ORM框架就能轻松实现一个多对多表关系的增删改查。
快学Python
2021/08/09
5550
django admin 对 list_filter 排序
1. https://cloud.tencent.com/developer/ask/34273
卓越笔记
2023/02/18
4970
django  admin 对 list_filter 排序
Django2.0中文(admin)
1 创建超级用户 python manage.py createsuperuser 2 urls.py: admin/ include(admin.site.urls) 3 注册管理的models admin.site.register(Object)
用户5760343
2022/05/14
4500
Django学习记录
创建:app01 执行 python manage.py startapp app01 在setting中奖app01应用加入INSTALL_APPS选项中
懿曲折扇情
2022/08/24
3890
Django流程_菜鸟裹裹收费标准
打开cmd,输入:pip install Django==1.11.4,然后回车
全栈程序员站长
2022/10/05
1.3K0
Django流程_菜鸟裹裹收费标准
Django之ForeignKey和ManyToManyField多表查询
多表查询是模型层的重要功能之一, Django提供了一套基于关联字段独特的解决方案.
菲宇
2022/12/21
1.8K0
几乎不写一行代码,快速开发后台功能
👆点击“博文视点Broadview”,获取更多书讯 Python 长期稳居编程语言排行的前五,不仅已经成为数据分析、人工智能领域必不可少的工具,还被越来越多地公司用于网站搭建。Python 方向岗位的薪水在水涨船高,成为目前最有潜力的编程语言之一。 目前,市场上的Python基础书很多了,那你在学完Python基础书后有没有兴趣用Python的Web框架Django来进行网站开发呢? 本文将介绍商城系统后台的需求分析、架构设计及数据库设计。 商城系统后台,使用Django框架自带的Admin后台管理系统来
博文视点Broadview
2022/07/25
9860
几乎不写一行代码,快速开发后台功能
Django admin Foreignkey ManyToMany list_display展示
对于上面的model,如果要在django admin中展示ghosts信息,那么在list_display中直接加入’ghosts’ 会报下面的错误:The value of ‘list_display[1]’ must not be a ManyToManyField.
obaby
2023/02/24
7760
django2实战2.创建博客应用创建应用文章表的字段设计激活应用开启后台将post模型注册到后台自定义文章显示字段增加可选操作
上篇创建了一个项目,项目相当于站点,应用即是独立的功能模块。比如:淘宝是一个完整的网站,即是一个项目。而淘宝下的聚划算属于一个应用
章鱼喵
2018/09/26
1.1K0
django2实战2.创建博客应用创建应用文章表的字段设计激活应用开启后台将post模型注册到后台自定义文章显示字段增加可选操作
35.Django2.0文档
第四章 模板  1.标签 (1)if/else {% if %} 标签检查(evaluate)一个变量,如果这个变量为真(即,变量存在,非空,不是布尔值假),系统会 显示在 {% if %} 和 {% endif %} 之间的任何内容,例如: {% if today_is_weekend %} <p>Welcome to the weekend!</p> {% endif %} {% else %} 标签是可选的: {% if today_is_weekend %} <p>Welcome to the we
zhang_derek
2018/04/11
11.3K0
35.Django2.0文档
Django之ORM数据库
            django默认使用sqlite的数据库,默认自带sqlite的数据库驱动 , 引擎名称:django.db.backends.sqlite3
超蛋lhy
2018/08/31
2.6K0
Django之ORM数据库
点击加载更多

相似问题

django管理list_filter太久了

41

django管理list_filter“或”条件

47

django管理自定义list_filter

16

Django菜鸟问题:根据ForeignKey表中的字段获取关联ForeignKey的计数?

10

Django:管理list_filter太长了

32
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文