Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >django import_export 个性化可视化导出外键字段

django import_export 个性化可视化导出外键字段

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

models.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 = 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="更新时间")

admins.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.contrib import admin
from django.forms import widgets
from apps.blog.models import *
from apps.blog.forms import ArticleAdminForm
from django.contrib.admin import SimpleListFilter
from django.utils.html import format_html
from import_export import resources, fields
from import_export.admin import ImportExportModelAdmin
from import_export.admin import ImportExportActionModelAdmin
from import_export.admin import ExportActionMixin
from import_export.widgets import ForeignKeyWidget
from django.contrib.auth import get_user_model

User = get_user_model()


# https://github.com/django-import-export/django-import-export/issues/758
# Register your models here.

class ArticleResource(resources.ModelResource):
    # 外键可视化导出
    user = fields.Field(
        column_name='user',
        # user 在本模型外键的字段名称
        attribute='user',
        # username 外键的里面的字段名
        widget=ForeignKeyWidget(User, 'username'))

    last_answerer = fields.Field(
        column_name='last_answerer',
        attribute='last_answerer',
        widget=ForeignKeyWidget(User, 'username'))

    def __init__(self, input_contract=None):
        super(ArticleResource, self).__init__()
        field_list = Article._meta.fields
        self.verbose_name_dict = {}
        for i in field_list:
            self.verbose_name_dict[i.name] = i.verbose_name

    # 默认导入导出field的column_name为字段的名称,这里修改为字段的verbose_name
    def get_export_fields(self):
        fields = self.get_fields()
        for field in fields:
            field_name = self.get_field_name(field)
            # 如果有设置 verbose_name,则将 column_name 替换为 verbose_name, 否则维持原有的字段名。
            if field_name in self.verbose_name_dict.keys():
                field.column_name = self.verbose_name_dict[field_name]
        return fields

    class Meta:
        skip_unchanged = True  # 是否跳过的记录出现在导入结果对象
        report_skipped = False  # 所有记录将被导入
        # export_order = ('id', )
        model = Article


class ArticleAdmin(ImportExportActionModelAdmin):
    # change_list_template = "change_list_custom.html"  # 自定义的模板名称
    form = ArticleAdminForm  # 指定了表单,就不要再用 formfield_overrides 了

    def get_actions(self, request):
        # 列表禁用删除操作
        actions = super(ArticleAdmin, self).get_actions(request)
        if 'delete_selected' in actions and not request.user.is_superuser:
            del actions['delete_selected']
        return actions

    def has_add_permission(self, request, obj=None):
        # 编辑和列表页面非超管禁用 add 按钮
        if request.user.is_superuser:
            return True
        return False

    def show_status_button(self, obj):
        return format_html('<a href="{}" title="查看站点">{}</a>', obj.id, obj.show_status)

    show_status_button.short_description = "审核"

    def get_list_display(self, request):
        """
        Return a sequence containing the fields to be displayed on the
        changelist.
        """
        if request.user.is_superuser:
            list_display = ['id', 'thumb_shouw', 'title', 'node', 'num_views', 'show_status', 'slug', 'user',
                            'show_status_button', 'time_create']
            return list_display
        else:
            list_display = ['thumb_shouw', 'title', 'node', 'num_views', 'show_status', 'slug', 'user',
                            'show_status_button', ]
            return list_display

    # list_display = ['id', 'thumb_shouw', 'title', 'node', 'num_views', 'show_status', 'slug', 'user',
    #                 'show_status_button', 'time_create']

    list_display_links = ['id', 'thumb_shouw', 'title', 'node', 'num_views', 'user']
    list_filter = ['id', 'source__name', NodeFilter]
    search_fields = ['title_short', 'user', 'content']
    # list_editable = ["show_status", ]
    # style_fields = {"content": "ueditor"}
    readonly_fields = ('slug',)
    show_detail_fields = ['show_status', ]
    resource_class = ArticleResource


admin.site.register(Article, ArticleAdmin)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-12-9 1,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
django admin 给 字段 增加 HTML 样式(显示图片、设置字体颜色、超链接、按钮等)
django admin 后台样式默认情况下都是默认的样式,有时候我们需要在 admin 显示一张图片、或者更改一个文案的显示颜色等等,该怎办呢?
卓越笔记
2023/02/18
3K0
django admin 给 字段 增加 HTML 样式(显示图片、设置字体颜色、超链接、按钮等)
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
1K0
django admin 对 list_filter 排序
1. https://cloud.tencent.com/developer/ask/34273
卓越笔记
2023/02/18
5010
django  admin 对 list_filter 排序
Django admin 多对多字段 过滤方法 及 保持横向显示(穿梭框)
在 admin 中,文章的 tags 字段选择的时候可以按 Tag 的 show_status 过滤,并且保持横向展示
卓越笔记
2023/02/18
1.4K0
django admin 给字段设置 widget
* 本文代码同步更新至 https://github.com/yinzhuoqun/django2 *
卓越笔记
2023/02/18
1.2K0
django admin 给字段设置 widget
django import_export 个性化导出 model 里的 字段含有 choice 的值
models.py class UserProfile(AbstractUser): """ 用户 """ gender_choice = ( ("0", "女"), ("1", "男"), ) email = models.EmailField(verbose_name='邮箱', max_length=255, unique=True) phone = models.CharField(verbose_name="
卓越笔记
2023/02/18
9790
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
6150
Vue+Django2.0 restframework打造前后端分离的生鲜电商项目(1)
  新版的pycharm很贴心的让每一个新的项目,都自动会在一个虚拟环境中,放心的新建项目就可以了,不用考虑虚拟环境的事儿了
玩蛇的胖纸
2018/10/10
2K0
Vue+Django2.0 restframework打造前后端分离的生鲜电商项目(1)
django admin 实现 增加记录 和 修改记录 展现不同的表单
提供一个参考,具体逻辑要看具体情况。本质就是根据条件展示不同的表单内容(注意表单必填项字段,保存时要记得传值)。
卓越笔记
2023/02/18
1.2K0
超越村后端开发(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 annotate 分组统计
使用提供的 查询表达式 Annotate 查询集中的每个对象。查询表达式可以是一个简单的值、模型(或关联模型)字段的一个引用或对查询集中的对象一个聚合函数(平均值、和等)。
卓越笔记
2023/02/18
8920
Django_rest框架电商项目实践项目(一篇文章讲清楚电商项目)项目的创建与基本的配置,所有接口的代码,项目代码已给
做一个电商项目,就是卖不同品牌的电脑,可以根据不同的品牌进行查询,还有对订单的crud,还有用户的会员中心功能模块。还有收货地址模块
一写代码就开心
2022/01/21
2.8K0
Django_rest框架电商项目实践项目(一篇文章讲清楚电商项目)项目的创建与基本的配置,所有接口的代码,项目代码已给
Django+Vue开发生鲜电商平台之3.数据模型设计和资源导入
Github和Gitee代码同步更新: https://github.com/corleytd/Django_Fresh_Ecommerce; https://gitee.com/Python_Full_Stack/Django_Fresh_Ecommerce。
cutercorley
2020/07/23
1.9K0
Django+Vue开发生鲜电商平台之3.数据模型设计和资源导入
【Django | 开发】面试招聘信息网站(处理产品细节和权限&美化页面样式)
在model 修改原字段类型为 foreignkey (注意! 此方法会涉及到数据迁移,此时更改数据结构可能会报错)
计算机魔术师
2022/08/19
5210
【Django | 开发】面试招聘信息网站(处理产品细节和权限&美化页面样式)
Python:Django搭建博客
注册完后,在项目根目录中(即 manage.py 所在的目录)创建 templates 文件夹,使用 pycharm 创建项目会自动帮我们创建
用户8832503
2021/08/20
5850
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 打造生鲜超市(二)
使用Django基础模板搭建自己的知识库
今天给自己定了个小目标,一定要先做出点东西来,要不别回家了,哈哈。 当然我可不是瞎说,做事得有计划和目标。 我分为了两个阶段,计划在一天内完成,上午是阶段一,下午是阶段二。第一阶段全部要完成,第二阶段
jeanron100
2018/03/22
1.6K0
使用Django基础模板搭建自己的知识库
Django开发在线教育平台--学习整理(一)
首先,打开cmd,cd到存放django项目的文件夹,创建一个新工程(也可以用虚拟环境virtualenv):
SimonDM
2018/05/09
3K4
Django开发在线教育平台--学习整理(一)
Django ORM模型设计-客户关系管理
Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。
小团子
2019/11/08
8040
Django ORM模型设计-客户关系管理
七日Python之路--第九天(blog与Django)
在做models之前,最好将https://docs.djangoproject.com/en/1.6/ 中的the model layer 细读。
lpe234
2020/07/28
2540
推荐阅读
相关推荐
django admin 给 字段 增加 HTML 样式(显示图片、设置字体颜色、超链接、按钮等)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验