热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Django学习8添加个人应用(自定义应用页面持续补充)

Django的优势不言而喻,学习优化持续进行。以用为主,不求甚解,解决现实问题,记下以备复习。1.models.py1)默

Django的优势不言而喻,学习优化持续进行。以用为主,不求甚解,解决现实问题,记下以备复习。

1. models.py

    1) 默认值/帮助tip:default / help_text: help_text='Help Text',default='Default Text'
    2) 字段别名:verbos_name,页面别名显示
        checkuser = models.CharField(verbose_name='Verbos Name',help_text='Help Text',default='Default Text')

    3) show current date:date.today / timezone.now

2. admin.py

    1) get_queryset: 列表只显示当前用户数据(only show current user data)

# 过滤列表显示内容 querset
class DailyrecordAdmin(admin.ModelAdmin):def get_queryset(self,request):qs = super(DailyrecordAdmin, self).get_queryset(request) if request.user.is_superuser:return qsreturn qs.filter(user_id=request.user)

    2) 折叠fieldss:t:'classes': ('collapse',)

fieldsets = ('classes': ('collapse',),('Basic', {'classes': ('collapse',),'fields': (('drecorddate','user','dmanhour','overtime',),('project','task',),)}),)

    3) 只读字段显示 : readonly_fields = ('dmanhour','drecorddate') ,  (list)/ [tuple]

def get_readonly_fields(self, request, obj=None):
### readonly fields as select obj or notif obj: # select object and edidself.readonly_fields = ["fields1","fields2",]else: # not select, means ne2self.readonly_fields = ["pe_user",]return self.readonly_fields### readonly fileds as user roleif request.user.is_superuser:self.readonly_fields = [] # 管理员,所有字段非只读(read only)# change_view页面显只读字段内容,add_view页面显示为 - return self.readonly_fields # show as readonly_fields setting

    4) 列表action操作:actions_on_top = True / False

    5) 列表查询:search_fields = ('列1','列2','列3')
    6) 每页显示条目数: list_per_page = number
    7) 列排序:ordering = ('列1','列2','列3')
    8) 列数据筛选:
        list_filter = ('列1','列2','列3')    -- 页面列表右侧显示
        date_hierrchy = ’日期列‘  -- 页面列表上方显示

    9) 数据保存:save_on_top = True / False -- 记录添加页面顶部显示 Save 按钮 
  10) 列表字段可编辑:list_editable = ('列1','列2','列3')   
          列表字段显示超链接:list_display_links = ('列1','列2','列3')   -- 默认列表第一列,链接到详细记录页面
       -- 可编辑 和 超链接字段需联合使用,并且超链接字段中存在与可编辑字段不同的字段
  11) inline -- 通过主外键关系建立两条数相关数据管理页面
                       同时也可以建立一张主键表,多张外键表,形成1对N的主、副属性关系

## models.py
class Task(models.Model):taskname = models.CharField("Task Name",max_length=150, unique=True)......class TaskDetail(models.Model):## 通过外键指向主表 task, 引用字段 tasknametask = models.ForeignKey(Task, to_field='taskname', max_length=150, on_delete=models.CASCADE)taskdetail = models.CharField(max_length=150)......## admin.py
## 定义子表 inline 引用
class TaskDetailinline(admin.TabularInline):model = TaskDetailextra = 0class TaskAdmin(admin.ModelAdmin):......## 主表引用inlines = [TaskDetailinline]

  12) formfield_for_foreignkey

# 定义外键字段显示
def formfield_for_foreignkey(self, db_field, request, **kwargs):if db_field.name == "field_name":kwargs["queryset"] = Foreign_Model.objects.filter(foreign_field_name=request.user) # 此处过滤使用:外键的模块 和 外键引用字段return super().formfield_for_foreignkey(db_field, request, **kwargs)

  13)formfield_for_choice_field()

# 重写 choice 字段内容
def formfield_for_choice_field(self, db_field, request, **kwargs):if db_field.name == "choice_field_name":kwargs['choices'] = () # 初始化 choice 属性if request.user.is_superuser and db_field.name == "choice_field_name":kwargs['choices'] += (('New', 'This is new choice'),) # 新增 choice 属性return super().formfield_for_choice_field(db_field, request, **kwargs)

  14)formfield_overrides

# 重写表单字段formfield_overrides = {models.TextField: {'widget': Textarea(attrs={'cols': 60, 'rows': 1})} # 此处将model中定义的text field字段默格式 40*10 重定义为 60*1}

3. Django admin页面

   1) 登录页面图片显示

--> create folder static and copy PIC
--> modifiy: Lib\site-packages\django\contrib\admin\templates\admin\base_site.html
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static"), '/../static/',]

{{ site_header|default:_('Django administration') }}

    2) view 与 page参数传递:
        * view通过 GET/POST方法从page获得数据
        * page通过view的render方法,使用{% %} 和 {{  }}使用view中数据

    3) 数据的级联选择 django-smart-selects

    4)view文件中处理数据:*.objects.raw(SQLstr),生成RawQuerySet,然后进行后期数据处理
         “not enough arguments for format string” -- 注意sql是否可以正确在执行且返回值,特别是模糊查询时使用“%%”替代“%”

4. 自定义页面权限设置

# set self-define authentication in view, using admin default administrationfrom django.contrib.admin.views.decorators import staff_member_requireddef new_page(request): #self define page# page data check# transfer data to front-pagereturn render(request, 'new_page.html', {page data})new_page = staff_member_required(new_page ) # set new_page accessing authentication


推荐阅读
  • 十六.增加一个项目协作留言板功能(二)----- 建立一个任务管理的列表页面
    我们设计一个页面来展示正在处理的任务,该表格可以参照之前基础信息的增删改查。用户通过这个页面对任务进行相应操作。1.在views. ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • pyecharts 介绍
    一、pyecharts介绍ECharts,一个使用JavaScript实现的开源可视化库,可以流畅的运行在PC和移动设备上,兼容当前绝大部 ... [详细]
  • DRF类视图让你的代码DRY起来
    刚开始写views.py模块的代码,一般都是用def定义的函数视图,不过DRF更推荐使用class定义的类视图,这能让我们的代码更符合DRY(Don'tRepeatYour ... [详细]
author-avatar
Pisces2lemon
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有