사용자 지정 관리자의 필요에 따라

정의 목록 페이지

사용자 정의 list_filter

첫째, 필터의 전체 기능, 필터는 사용자 정의 할 필요가있다. 다음 코드에 정의 된 PostAdmin 위의 정의 :

class CategoryOwnerFilter(admin.SimpleListFilter):
    """
    自定义过滤器只展示当前用户分类
    """
    title = '分类过滤器'
    parameter_name = 'owner_category'

    def lookups(self, request, model_admin):
        return Category.objects.filter(owner=request.user).values_list('id', 'name')
    
    def queryset(self, request, queryset):
        category_id = self.value()
        if category_id:
            return queryset.filter(category_id=self.value())
        return queryset

제공되는 클래스 장고 관리 SimpleListFilter를 상속하여 구현 사용자 정의 필터는 다음에서만 ModelAdmin에 필터 구성을 사용자 정의해야합니다.

SimpleListFilter 클래스는 두 가지 방법과 두 개의 속성을 제공합니다. 쇼 제목의 제목은, PARAMETER_NAME는 (1)의 내용에 대해 질의 분류 ID 쿼리로 URL 매개 변수의 이름 인 경우, 쿼리는 다시 URL의 일부입니다 ?owner_category=1다음 필터하여 필터링을 통해 ID를 얻을 수 있습니다.

조회 : 콘텐츠를 반환 표시하고 (쿼리 이상 사용) 쿼리 ID를 사용합니다.

검색어 세트 : 돌아 가기 URL 쿼리의 내용에 따라 페이지 데이터를 나열합니다. 예를 들어, 마지막 쿼리 URL시 경우 ?owner_category=1,이 얻을 self.value()의 검색어 1 항에있어서, 다음은 필터링됩니다 1입니다. 검색어 세트는 여기에 데이터 세트를 게시 데이터 수집 쇼의 모든 페이지의 목록입니다.

당신이 쓸 때, 당신은 단지 list_filter을 수정해야합니다 :

list_filter = [CategoryOwnerFilter]

당신은 사용자는 자신이 분류를 만들어 볼 수있는 사이드를 필터링 할 수 있도록 할 수 있습니다.

사용자 목록 페이지 데이터

list_filter 사용자 정의가 완료뿐만 아니라 현재 목록 페이지에서 로그인 한 사용자가 작성한 기사 만 볼 수 있도록 사용자 정의 계속해야합니다.

PostAdmin이 admin.ModelAdmin로부터 상속 분명히 ModelAdmin는 방법을 제공 무엇을 볼 필요가, 당신은 그것을 다시 작성할 수 있습니다.

블로그 / admin.py :

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display = [
        'title', 'category', 'status',
        'created_time', 'owner', 'operator'
    ]
    
    # 省略部分代码
    
    def save_model(self, request, obj, form, change):
        obj.owner = request.user
        return super(PostAdmin, self).save_model(request, obj, form, change)

    def get_queryset(self, request):
        qs = super(PostAdmin, self).get_queryset(request)
        return qs.filter(owner=request.user)

이 두 사용자가 볼 수 있습니다에서 데이터 필터링의 일부에 불과 최종 검색어 세트에서 생성 된 데이터 소스가, 다음에 여과 곳 찾을 필요가있다.

구성 편집 페이지

첫째, 버튼의 위치가 메인 버튼은 편집 페이지에서 "저장"하지만 장고는 쉬운 조작을위한 두 개의 버튼을 제공합니다. "저장 및 다른 추가", "저장하고 계속"와 버튼의 위치 정보, 구성 항목이 수행 될 수있다 : save_on_top 제어하는 ​​데 사용되는 페이지의 맨 위의 세 개의 버튼 표시 여부.

이 필드는 요구 및 디스플레이 순서 또는이 필드 셋 필드로 구성 될 수 있는지를 보여준다. 당신은 예를 들어 보여줌으로써 다음 소유자를 배제하지 않는 필드를 지정할 수 있습니다, 현재 사용자가 자동으로 프로그램에 할당됩니다. 다음과 같이 코드입니다 :

# blog/admin.py

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    # 省略其他代码
    exclude = ('owner', )
    
    fields = (
        ('category', 'title'),
        'desc',
        'status',
        'content',
        'tag',
    )
    # 省略其他代码
    

필드는 두 가지 기능을 배치되며, 하나의 디스플레이 필드에 정의하는 다른 표시 필드가 순차적으로 배열된다.

페이지 레이아웃을 제어하는 ​​데 사용되는 필드 셋, 그것은 상기 코드의 첫 번째 필드로 대체된다 :

fieldsets = (
    ('基础配置', {
        'description': '基础配置描述', 
        'fields': (
            ('title', 'category'), 
            'status', 
        ), 
    }),
    ('内容', {
        'fields': (
            'desc',
            'content',
        ),
    }),
    ('额外信息', {
        'classes': ('collapse', ),
        'fields': ('tag', ),
    })
)

필드 셋과 같은 두 개의 요소의 형식 목록 튜플을 필요 :

fieldsets = (
    (名称, {内容}),
    (名称, {内容}),
)

두 요소의 내용을 포함 튜플은 첫 번째 요소는 두 번째 요소의 현재 섹션의 이름 설명 필드 구성 및 스타일의 현재 구간이다. 즉, 첫 번째 요소는 문자열이며, 두 번째 요소는 딕셔너리, 딕셔너리이며, 키 필드 설명 및 클래스 일 수있다.

표시 소자를 제어 할 수있는 상기와 동일 필드의 구성은, 정렬 요소 및 요소의 위치에 결합 될 수있다. 클래스의 역할은 구성 CSS 속성을로 일부 섹션을 추가하는 것입니다, 장고 관리자는 기본 붕괴와 폭에 의해 지원됩니다. 물론, 당신은 또한 다른 속성을 쓸 수 있습니다, 다음 자신의 스타일로 처리 할 수 ​​있습니다.

구성 페이지를 편집 할뿐만 아니라 결과-많은 분야의 표시를 제어하는 ​​데 사용되는 구성 filter_horizontal 및 filter_vertica1 많은 필드 표시에 대한 소개.

로 정의 정적 리소스

CSS와 자바 스크립트는 사용자 정의 클래스를 추가 할 자원이와 미디어 페이지에서 증가 할 수 있습니다.

class PostAdmin(admin.ModelAdmin):
    class Media:
        css = {
            'all': ("https://cdn.bootcss.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css", ),
        }
        js = ('https://cdn.bootcss.com/bootstrap/4.0.0-beta.2/js/bootstrap.bundle.js', )

사용자 지정 양식

이용 ModelForm을 필요로하는 멀티 라인 다중 열 모드에서 표시 될 수있는 문서 정보 필드와 더 맞춤형 요구가있는 경우, 상기 모든 구성은 ModelAdmin에 기초한다.

Adminforms.py 먼저 블로그의 디렉토리에 파일을 추가합니다. 이, 그래서 여기에 양식의 백 - 엔드 관리로 사용되기 때문에 형태가 아닌 adminforms 죽음 지정됩니다. 이는 단지 사용자 입력을 수신 처리의 형태에 대해 별도의 영역에있다.

다음으로, 필요성은 양식에 정의 된 코드를 작성합니다. 폼의 역할을, 상기 수 폼 모델의 논리와 모델 데이터베이스 사용자 입력 추상적 필드이며, 형태는 추상적 데이터 모델을 표시하는 일치한다.

adminforms.py에서,이 필드의 상태 형태에 의한 표시를 정의한다 :

from django import forms

class PostAdminForm(forms.ModelForm):
    desc = forms.CharField(widget=forms.Textarea, label='摘要', required=False)

그런 다음 관리자 정의에 구성 :

# blog/admin.py

from .adminforms import PostAdminForm

class PostAdmin(admin.ModelAdmin):
    form = PostAdminForm
    # 省略其他代码

이 때, 페이지를 새로 고침, 당신은 문서 설명 필드는 텍스트 영역 구성 요소로 변경되었습니다 볼 수 있습니다.

사용자 지정 사이트

사이트는 사이트에 해당하고, 이제 새로운 수요가 있습니다 : 사용자 관리 모듈은 문서 분류 데이터를 별도로 관리되어야한다. 또한, 필요 기본 디스플레이 배경을 수정합니다.

url(r'^admin/', admin.site.urls)

여기 사이트 django.contrib.admin.AdminSite의 예 그러므로, AdminSite가 자신의 사이트에 다음 코드를 정의 할 수 있습니다 상속 :

from django.contrib.admin import AdminSite

class CustomSite(AdminSite):
    site_header = 'Typeidea'
    site_title = 'Typeidea管理后台'
    index_title = '首页'
    
custom_site = CustomSite(name='cus_admin')

typeidea / typeidea / custom_site.py에 대한 코드는 다음 PostAdmin 예 모든 앱 레지스터의 아래 부분의 코드를 수정 :

@admin.register(Post)변경 @admin.register(Post, site=custom_site)모듈의 도입을 필요로하는,from typeidea.custom_site import custom_site

(가) 위의 주소를 다시 얻을 관리자 이름을 사용하는 방법과 반대로, 블로그 / admin.py 코드를 조정하는 것이 필요하다.

원래 코드 :

def operator(self, obj):
    return format_html(
        '<a href="{}">编辑</a>',
        reverse('admin:blog_post_change', args=(obj.id,))
    )
operator.short_description = '操作'

다음과 같이 개정 :

def operator(self, obj):
    return format_html(
        '<a href="{}">编辑</a>',
        reverse('cus_admin:blog_post_change', args=(obj.id,))
    )
operator.short_description = '操作'

다음과 같이 다음, 파일이 urls.py에서 수정해야, 전체 코드는 다음과 같습니다

from django.conf.urls import url
from django.contrib import admin

from .custom_site import custom_site

urlpatterns = [
    url(r'^super_admin/', admin.site.urls),
    url(r'^admin/', custom_site)
]

그래서 사용자 관리 설정 백엔드 주소, 사업을 관리하는 데 사용되는 다른 세트의 두 가지가있다. 그러나이 시스템은 사용자의 시스템 로직을 기반으로하지만, URL을 나누었다.

추천

출처www.cnblogs.com/qiuxirufeng/p/11391693.html