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

Posted Rolei_zl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django学习8 -- 添加个人应用(自定义应用页面--持续补充)相关的知识,希望对你有一定的参考价值。

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)

class DailyrecordAdmin(admin.ModelAdmin):
    def get_queryset(self,request):
        qs = super(DailyrecordAdmin, self).get_queryset(request)  
        if request.user.is_superuser:
            return qs
        return 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 not
        if obj:  # select object and edid
            self.readonly_fields = ["fields1","fields2",]
        else:    # not select, means ne2
            self.readonly_fields = ["pe_user",]

        return self.readonly_fields

### readonly fileds as user role
        if 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, 引用字段 taskname
    task = 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 = TaskDetail
    extra = 0

class TaskAdmin(admin.ModelAdmin):
    ......
    ## 主表引用
    inlines = [TaskDetailinline]

    12) formfield_for_foreignkey
          formfield_for_choice_field()

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/',]

<h1 id="site-name"><img src="%static "/work2.jpg" %" alt="Logo" width=25% hspace=0><a href="% url 'admin:index' %"> site_header|default:_('Django administration') </a></h1>

    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 administration

from django.contrib.admin.views.decorators import staff_member_required

def new_page(request):    #self define page
    # page data check
    # transfer data to front-page
    return render(request, 'new_page.html', page data)

new_page = staff_member_required(new_page )   # set new_page accessing authentication

以上是关于Django学习8 -- 添加个人应用(自定义应用页面--持续补充)的主要内容,如果未能解决你的问题,请参考以下文章

Django学习16 -- ModelAdmin options

Django学习16 -- ModelAdmin options

django搭建个人博客

如何将自定义标签/过滤器添加到现有的 Django 应用程序?

向 Django 应用程序添加一个自定义的面向用户的表单(使用 selectize 和 taggit)

Django为用户配置文件创建自定义URL