前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >django admin list_filter 显示外键字段

django admin list_filter 显示外键字段

作者头像
卓越笔记
发布于 2023-02-18 02:49:07
发布于 2023-02-18 02:49:07
98900
代码可运行
举报
文章被收录于专栏:卓越笔记卓越笔记
运行总次数:0
代码可运行

models.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Node(models.Model):
    """
    节点表
    """
    name = models.CharField(max_length=128, unique=True, verbose_name="节点名称")

    # SlugField 是一个新闻术语(通常叫做短标题)。一个slug只能包含字母、数字、下划线或者是连字符,通常用来作为短标签。通常它们是用来放在地址栏的URL里的。
    # 像CharField一样,你可以指定max_length(也请参阅该部分中的有关数据库可移植性的说明和max_length)。如果没有指定
    # max_length, Django将会默认长度为50。
    # 将Field.db_index设置为True。
    # 根据某些其他值的值自动预填充SlugField通常很有用。你可以在admin中使用prepopulated_fields自动执行此操作。
    slug = models.SlugField(max_length=128, unique=True, verbose_name="url标识符")
    time_create = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
    num_topics = models.IntegerField(default=0, verbose_name="主题数量")
    category = models.ForeignKey(Category, on_delete=models.DO_NOTHING, verbose_name="所属类别")
    show_status = models.BooleanField(default=True, verbose_name="显示状态")

    def save(self, *args, **kwargs):
        self.slug = slugify(self.name)
        super(Node, self).save(*args, **kwargs)

    class Meta:
        verbose_name = "节点"
        verbose_name_plural = "节点列表"

    def __str__(self):
        return self.name


class Article(models.Model):
    """
    主题表/文章表
    """
    title = models.CharField(max_length=128, unique=True, verbose_name="标题")
    slug = models.SlugField(max_length=128, unique=True, verbose_name="url标识符")
    content = RichTextUploadingField(verbose_name="内容", config_name='awesome_ckeditor')
    node = models.ForeignKey(Node, on_delete=models.DO_NOTHING, verbose_name="所属节点")
    user = models.ForeignKey(User, on_delete=models.DO_NOTHING, related_name="user_article", verbose_name="作者")
    source = models.ForeignKey(Source, on_delete=models.DO_NOTHING, verbose_name="来源", blank=True, null=True)
    tags = models.ManyToManyField(Tag, verbose_name="标签", related_name="tags_article", blank=True)
    num_views = models.IntegerField(default=0, verbose_name="浏览数量")
    num_favorites = models.IntegerField(default=0, verbose_name="收藏数量")
    last_answerer = models.ForeignKey(User, on_delete=models.DO_NOTHING, related_name="last_answerer_article",
                                      verbose_name="最后回复者", blank=True,
                                      null=True)
    show_status = models.BooleanField(default=True, verbose_name="显示状态")
    time_create = models.DateTimeField(auto_now_add=True, verbose_name="发表时间")
    time_update = models.DateTimeField(blank=True, null=True, auto_now=True, verbose_name="更新时间")

    def save(self, *args, **kwargs):
        self.slug = slugify(self.title)
        super(Article, self).save(*args, **kwargs)

    # 获取后台文本编辑器图文内容中图片url地址
    def get_content_img_url(self):
        temp = Article.objects.filter(pk=str(self.id)).values('content')  # values获取Article数据表中的content字段内容
        html = pq(temp[0]['content'])  # pq方法获取编辑器html内容
        # print(html, "\n", "----")
        img_path = pq(html)('img').attr('src')  # 截取html内容中的路径
        # print("pic", img_path)
        return img_path  # 返回第一张图片路径

    # 管理后台显示文章的缩略图
    def thumb_shouw(self):
        if self.get_content_img_url():
            return format_html(
                '<span><img src="{}"/>{}</span>', self.get_content_img_url(), "这里是缩略图")
        else:
            return format_html('<span style="color:{}">{}</span>', "red", "暂无缩略图")

    thumb_shouw.short_description = format_html('<span class="text">缩略图</span>')   # 新字段的显示的名称,相当于 verbose_name
    thumb_shouw.admin_order_field = "-time_update"  # 指定排序方式,更新时间倒序排列

    class Meta:
        verbose_name = "文章"
        verbose_name_plural = "文章列表"

    def __str__(self):
        title_short = self.title if len(self.title) < 15 else self.title[:12] + '...'
        return "%s %s %s" % (self.id, self.user, title_short)

admin.py (显示 node 外键字段)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class ArticleAdmin(admin.ModelAdmin):
    form = ArticleAdminForm  # 指定了表单,就不要再用 formfield_overrides 了

    list_display = ['id', 'thumb_shouw', 'title', 'node', 'num_views', 'show_status', 'slug', 'user']
    list_display_links = ['id', 'thumb_shouw', 'title', 'node', 'num_views', 'user']
    list_filter = ['id', 'title', 'node__name', 'user']  # 显示外键字段,使用 字段名__关联 model 的字段名
    search_fields = ['title_short', 'user', 'content']
    list_editable = ["show_status", ]
    # style_fields = {"content": "ueditor"}
    readonly_fields = ('slug',)
    show_detail_fields = ['show_status', ]
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-9-25 1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
django admin 给 字段 增加 HTML 样式(显示图片、设置字体颜色、超链接、按钮等)
django admin 后台样式默认情况下都是默认的样式,有时候我们需要在 admin 显示一张图片、或者更改一个文案的显示颜色等等,该怎办呢?
卓越笔记
2023/02/18
3K0
django admin 给 字段 增加 HTML 样式(显示图片、设置字体颜色、超链接、按钮等)
django import_export 个性化可视化导出外键字段
models.py class Article(models.Model): """ 主题表/文章表 """ title = models.CharField(max_length=128, unique=True, verbose_name="标题", help_text="请填写标题") slug = models.SlugField(max_length=128, unique=True, verbose_name="url标识符") content =
卓越笔记
2023/02/18
7720
django admin 对 list_filter 排序
1. https://cloud.tencent.com/developer/ask/34273
卓越笔记
2023/02/18
4930
django  admin 对 list_filter 排序
Django admin 多对多字段 过滤方法 及 保持横向显示(穿梭框)
在 admin 中,文章的 tags 字段选择的时候可以按 Tag 的 show_status 过滤,并且保持横向展示
卓越笔记
2023/02/18
1.3K0
django 获取富文本编辑器中的图片地址(缩略图、封面)
开发环境   1. python: 3.6.8   2. django==1.11.22 models.py from django.db import models from django.db.models.signals import post_save from django.contrib.auth import get_user_model from DjangoUeditor.models import UEditorField from pyquery import PyQuery as
卓越笔记
2023/02/18
6090
django annotate 分组统计
使用提供的 查询表达式 Annotate 查询集中的每个对象。查询表达式可以是一个简单的值、模型(或关联模型)字段的一个引用或对查询集中的对象一个聚合函数(平均值、和等)。
卓越笔记
2023/02/18
8820
django admin 实现 增加记录 和 修改记录 展现不同的表单
提供一个参考,具体逻辑要看具体情况。本质就是根据条件展示不同的表单内容(注意表单必填项字段,保存时要记得传值)。
卓越笔记
2023/02/18
1.2K0
广告小程序后端开发(2.Models设计)
3.其中“提现记录表”是暂时的,等到后期如果微信的“企业提款到零钱”功能可以开放使用,则要对这个表进行修改。
玩蛇的胖纸
2019/05/14
6600
BBS项目(二)
目录 BBS项目(二) ORM 创建相关表 表模型 修改admin样式 Simple-UI 注册表添加数据 注册forms类编写 注册功能前端搭建 头像实时显示功能实现 BBS项目(二) 可以在本地写或虚拟环境 添加虚拟环境 如果虚拟环境启动报错:解决 query = query.decode(errors=‘replace‘) AttributeError: ‘str‘ object has no attribute ‘decode‘ 解决办法 query = query.decode(erro
HammerZe
2022/03/24
7860
BBS项目(二)
Django开发网页计数器统计页面浏览次数
实际Web开发过程中,我们经常要统计并显示一个页面的浏览次数。今天我们会以博客的例子,教你如何利用Django开发网页计数器,统计并显示一篇文章的浏览次数。本文的原理可以适用于很多场景,比如统计某一文件的下载次数,统计某一用户在单位时间内的登录次数。本文使用Django 2.0 + Python 3.X实现。
菲宇
2019/06/13
2.2K0
Django开发网页计数器统计页面浏览次数
Django实战-信息资讯-付费资讯基础模型
Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。
小团子
2019/07/18
5540
Django实战-信息资讯-付费资讯基础模型
超越村后端开发(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 REST framework+Vue 打造生鲜超市(二)
三、Models设计 3.1.项目初始化 (1)进虚拟环境下安装 django2.0.2 djangorestframework和相关依赖mark,filter pillow  图片处理 pip install djangorestframework pip install -i https://pypi.douban.com/simple django==2.0.2 pip install markdown pip install django-filter pip install pillow
zhang_derek
2018/04/11
2.2K0
Django REST framework+Vue 打造生鲜超市(二)
越光后端开发——ygapi(2.新建Model)
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/03/15
3700
越光后端开发——ygapi(2.新建Model)
Django——ContentType(与多个表建立外键关系)及ContentType-signals的使用
 在django中,有一个记录了项目中所有model元数据的表,就是ContentType,表中一条记录对应着一个存在的model,所以可以通过一个ContentType表的id和一个具体表中的id找到任何记录,及先通过ContenType表的id可以得到某个model,再通过model的id得到具体的对象。
用户1214487
2022/03/26
4.4K0
Django——ContentType(与多个表建立外键关系)及ContentType-signals的使用
Vue+Django2.0 restframework打造前后端分离的生鲜电商项目(1)
  新版的pycharm很贴心的让每一个新的项目,都自动会在一个虚拟环境中,放心的新建项目就可以了,不用考虑虚拟环境的事儿了
玩蛇的胖纸
2018/10/10
2K0
Vue+Django2.0 restframework打造前后端分离的生鲜电商项目(1)
【愚公系列】2022年01月 Django商城项目19-商品数据表的设计
在电商项目里面为了准确的描述商品的区别,我们抽象出来两个概念,Spu和Sku这两个概念。
愚公搬代码
2022/01/26
4560
【愚公系列】2022年01月 Django商城项目19-商品数据表的设计
day100-Exception继承定义错误信息&结算接口&结算数据结构
1.Exception的继承 # 自定义继承类继承 Exception class MyException(Exception): def __init__(self, code, msg): self.code = code self.msg = msg # 自定义相应信息 class BaseResponse: def __init__(self): self.code = '' self.error = ''
少年包青菜
2020/03/26
6970
Django 数据查询中对字段进行排序
也可以使用两个字段进行排序,当 第一个字段值 相等时,再用 第二个 字段值 来排序
卓越笔记
2023/02/18
2.9K0
广告小程序后端开发(16.优惠券系统:原理流程图,奖品实验数据,生成二维码)
业务需求:在一个广告小程序内发许多其他的小程序的优惠券。 1.原理流程图 2.奖品(优惠券)实验数据 1.修改apps/ad/models.py中的Prize表类 class Prize(models
玩蛇的胖纸
2019/06/14
7590
广告小程序后端开发(16.优惠券系统:原理流程图,奖品实验数据,生成二维码)
推荐阅读
相关推荐
django admin 给 字段 增加 HTML 样式(显示图片、设置字体颜色、超链接、按钮等)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验