Django admin site (1) ModelAdmin Options

13066 단어 django
Admin 관리 인터페이스는django의 킬러 앱입니다.이것은 당신 모델의 메타데이터를 읽고 당신에게 강력하고 사용할 수 있는 인터페이스를 제공하며 사이트 관리자는 그것으로 즉시 사이트에 내용을 추가할 수 있다.
admin을 사용하려면 다음 절차를 따르십시오.
  • 'django.contrib.admin'setting에 가입한 INSTALLEDAPPS 구성에서
  • INSTALLED 보장APPS에는'django.'가 포함되어 있습니다.contrib.auth','django.contrib.contenttypes','django.contrib.메시지 및 django.contrib.sessions.',Django의 admin은 이 네 개의 가방이 필요합니다.
  • 'django.contrib.messages.context_processors.TEMPLATE 에 메시지 추가CONTEXT_PROCESSORS에서 MIDDLEWARECLASSES에는'django'가 포함되어 있습니다.contrib.auth.middleware.Authentication Middleware'와'django.contrib.messages.middleware.MessageMiddleware'. (기본 가입)
  • Admin에 적용할 모델을 결정합니다.
  • admin이 필요한 모든 앱의admin입니다.py에서 ModelAdmin을 생성합니다.
  • 모델 등록 및 모델 Admin
    from django.contrib import admin
    
    from myproject.myapp.models import Author
    
    
    
    class AuthorAdmin(admin.ModelAdmin):
    
        pass
    
    admin.site.register(Author, AuthorAdmin)

  • URLconf에 admin 액세스 구성
    from django.contrib import admin
    
    admin.autodiscover()
    
    
    
    # And include this URLpattern...
    
    urlpatterns = patterns('',
    
        # ...
    
        (r'^admin/', include(admin.site.urls)),
    
        # ...
    
    )


  • python 관리자를 실행합니다.py migrate 알림http://127.0.0.1:8000/admin/됐어.
    ModelAdmin 객체
    register 장식기
    register(*models[, site=django.admin.sites.site])
    1.7에 새로 추가되었습니다.Model 및 ModelAdmin은 다음과 같이 등록할 수 있습니다.
    from django.contrib import admin
    
    from .models import Author
    
    
    
    @admin.register(Author)
    
    class AuthorAdmin(admin.ModelAdmin):
    
        pass
    
    

    한 번에 여러 모델을 등록하고 사용자 정의 AdminSite를 사용할 수 있습니다.
    from django.contrib import admin
    
    from .models import Author, Reader, Editor
    
    from myproject.admin_site import custom_admin_site
    
    
    
    @admin.register(Author, Reader, Editor, site=custom_admin_site)
    
    class PersonAdmin(admin.ModelAdmin):
    
        pass
    
    

    Admin이 어떻게 작동하는지
    저당 잡히다contrib.INSTALLED 에 admin 추가APPS 후,django는 자동으로 모든 app의admin을 찾을 것입니다.py 모듈과 import이 불러옵니다.
    class apps.AdminConfigDjango 1.7이 새로 추가되었습니다.admin 기본 AppConfig 클래스.django가 시작될 때 autodiscover () 를 실행합니다.
    class apps.SimpleAdminConfigDjango 1.7이 새로 추가되었습니다.AdminConfig과 유사하며 autodiscover()를 실행하지 않습니다.
    autodiscover () import 모든 app의admin.py 모듈.
    Django 1.7 변경: 이전 버전에서는 urls가 필요합니다.py에서 이 방법을 수동으로 시작해서 모든 app의admin을 찾습니다.py, 1.7 이후 AdminConfig에서 이 메서드를 자동으로 실행합니다.
    사용자 정의 AdminSite를 사용하는 경우 ModelAdmin의 하위 클래스를 자신의 코드에 로드하고 사용자 정의 AdminSite에 모두 등록해야 합니다.이 경우 자동 디스커버리 () 를 중지해야 합니다. 'django.contrib.admin.apps.INSTALLED 대신 SimpleAdminConfig'APPS의'django.contrib.admin'.
    ModelAdmin 옵션
    actions
    admin actions 목록
    actions_on_topactions_on_bottom
    액션의 위치.
    date_hierarchy
    날짜hierarchy는 모델의DateField나DateTimeField로 설정하면 관리자의 이 모델에 날짜 단계를 추가할 수 있습니다.
    fields
    exclude
    Model form에 표시되는 필드를 결정합니다.fields는 포함되고 exclude는 배제됩니다.
    from django.contrib import admin
    
    
    
    class AuthorAdmin(admin.ModelAdmin):
    
        fields = ('name', 'title')
    
    
    
    class AuthorAdmin(admin.ModelAdmin):
    
        exclude = ('birth_date',)
    
    

    다음과 같은 URL과 title 필드를 같은 줄에 놓을 수 있습니다.
    class FlatPageAdmin(admin.ModelAdmin):
    
        fields = (('url', 'title'), 'content')
    
    

    fieldsets
    fieldsets는 두 개의 메타데이터 그룹(name, field options) 목록으로, 필드를 블록으로 분할할 수 있습니다.
    from django.contrib import admin
    
    
    
    class FlatPageAdmin(admin.ModelAdmin):
    
        fieldsets = (
    
            (None, {
    
                'fields': ('url', 'title', 'content', 'sites')
    
            }),
    
            ('Advanced options', {
    
                'classes': ('collapse',),
    
                'fields': ('enable_comments', 'registration_required', 'template_name')
    
            }),
    
        )
    
    

    name은 블록의 제목,fieldoptions는 사전입니다.
    field_options 키는 다음과 같습니다.
      fields
    필드 이름의 모듈,fieldset에서 보여줍니다
    {
    
    'fields': (('first_name', 'last_name'), 'address', 'city', 'state'),
    
    }
    
    

      classes
    필드세트에 제공되는 추가 CSS 클래스의 목록입니다.
      description
    필드set 맨 위에 추가로 보여줄 수 있는 텍스트입니다.
    filter_horizontalfilter_vertical
    Model에 ManyToManyField 필드가 있는 경우 Filterhorizontal,filter_vertical은 기존 옵션 중에서 여러 가지를 선택할 수 있습니다.하나는 가로줄, 하나는 세로줄.
    form
    사용된 양식입니다.
    from django import forms
    
    from django.contrib import admin
    
    from myapp.models import Person
    
    
    
    class PersonForm(forms.ModelForm):
    
    
    
        class Meta:
    
            model = Person
    
            exclude = ['name']
    
    
    
    class PersonAdmin(admin.ModelAdmin):
    
        exclude = ['age']
    
        form = PersonForm
    
    

    충돌이 발생하면 ModelAdmin이 우선입니다.위의 예에서age는 제외되지만name는 페이지에 표시됩니다.
    formfield_overrides
    Model 양식 인터페이스의 일부 필드 옵션을 덮어쓰고 특정 유형의 필드에 사용자 정의 부품을 추가할 수 있습니다.
    예를 들어, 자신의 모델 TextField 필드에 리치 텍스트 편집기를 사용하려면 다음과 같이 하십시오.
    from django.db import models
    
    from django.contrib import admin
    
    
    
    # Import our custom widget and our model from where they're defined
    
    from myapp.widgets import RichTextEditorWidget
    
    from myapp.models import MyModel
    
    
    
    class MyModelAdmin(admin.ModelAdmin):
    
        formfield_overrides = {
    
            models.TextField: {'widget': RichTextEditorWidget},
    
        }
    
    

    list_display
    Model의change list 페이지에서 보여줄 수 있는 필드입니다.list 를 설정하지 않으면display, admin 인터페이스에서 Model의 를 자동으로 보여줍니다unicode__() 결과
     list_display 에는
  • 모델의 한 필드
    list_display = ('first_name', 'last_name')

  • 모델을 매개 변수로 호출할 수 있는 함수
    def upper_case_name(obj):
    
        return ("%s %s" % (obj.first_name, obj.last_name)).upper()
    
    upper_case_name.short_description = 'Name'
    
    
    
    class PersonAdmin(admin.ModelAdmin):
    
        list_display = (upper_case_name,)  

  • ModelAdmin의 속성
    class PersonAdmin(admin.ModelAdmin):
    
        list_display = ('upper_case_name',)
    
    
    
        def upper_case_name(self, obj):
    
            return ("%s %s" % (obj.first_name, obj.last_name)).upper()
    
        upper_case_name.short_description = 'Name'

  • 모델의 속성, 호출 가능한 함수와 유사
    from django.db import models
    
    from django.contrib import admin
    
    
    
    class Person(models.Model):
    
        name = models.CharField(max_length=50)
    
        birthday = models.DateField()
    
    
    
        def decade_born_in(self):
    
            return self.birthday.strftime('%Y')[:3] + "0's"
    
        decade_born_in.short_description = 'Birth decade'
    
    
    
    class PersonAdmin(admin.ModelAdmin):
    
        list_display = ('name', 'decade_born_in')
    
    

    Note:
  • 필드가 ForeignKey인 경우 외부 키의unicode__.
  • ManyToManyField
  • 는 지원되지 않습니다.
  • BooleanField인 경우 on 또는 off가 표시됩니다.
  • 제공된 문자열이 모델이나 모델 Admin 방법이나 호출 가능한 함수일 경우,django는 자동으로 HTML-escape 출력을 하고, 뜻을 바꾸지 않으려면 방법의allowtags가 True로 설정됩니다.XSS 크로스 스팟 공격을 피하기 위해formathtml 이스케이프 사용자의 입력:
    from django.db import models
    
    from django.contrib import admin
    
    from django.utils.html import format_html
    
    
    
    class Person(models.Model):
    
        first_name = models.CharField(max_length=50)
    
        last_name = models.CharField(max_length=50)
    
        color_code = models.CharField(max_length=6)
    
    
    
        def colored_name(self):
    
            return format_html('<span style="color: #{0};">{1} {2}</span>',
    
                               self.color_code,
    
                               self.first_name,
    
                               self.last_name)
    
    
    
        colored_name.allow_tags = True
    
    
    
    class PersonAdmin(admin.ModelAdmin):
    
        list_display = ('first_name', 'last_name', 'colored_name') 

  • 제공된 문자열이 모델이나 모델 Admin 방법이나 호출 가능한 함수이고 True 또는False로 되돌아오면 방법의boolean 속성을 True로 설정할 수 있습니다.이렇게 하면 페이지에 온이나 오프 아이콘을 보여 줍니다.
    from django.db import models
    
    from django.contrib import admin
    
    
    
    class Person(models.Model):
    
        first_name = models.CharField(max_length=50)
    
        birthday = models.DateField()
    
    
    
        def born_in_fifties(self):
    
            return self.birthday.strftime('%Y')[:3] == '195'
    
        born_in_fifties.boolean = True
    
    
    
    class PersonAdmin(admin.ModelAdmin):
    
        list_display = ('name', 'born_in_fifties') 

  • 모델의str__또는unicode__방법도 쓸 수 있어요.
    list_display = ('__str__', 'some_other_field')

  • 만약listdisplay의 항목은 데이터베이스의 실제 필드가 아닙니다. 이 항목을 정렬할 수 없습니다.반대로, 이 항목으로 정렬할 수 있으며,admin 을 설정할 수 있습니다.order_field 속성은 이 사실을 지적한다.
    from django.db import models
    
    from django.contrib import admin
    
    from django.utils.html import format_html
    
    
    
    class Person(models.Model):
    
        first_name = models.CharField(max_length=50)
    
        color_code = models.CharField(max_length=6)
    
    
    
        def colored_first_name(self):
    
            return format_html('<span style="color: #{0};">{1}</span>',
    
                               self.color_code,
    
                               self.first_name)
    
    
    
        colored_first_name.allow_tags = True
    
        colored_first_name.admin_order_field = 'first_name'
    
    
    
    class PersonAdmin(admin.ModelAdmin):
    
        list_display = ('first_name', 'colored_first_name')
    
    

    이렇게 coloredfirst_name 정렬 시,django는firstname 정렬.정렬을 대칭 이동할 수 있습니다.
    colored_first_name.admin_order_field = '-first_name'

  • list_display의 항목도 특성일 수 있습니다.
    class Person(object):
    
        first_name = models.CharField(max_length=50)
    
        last_name = models.CharField(max_length=50)
    
    
    
        def my_property(self):
    
            return self.first_name + ' ' + self.last_name
    
        my_property.short_description = "Full name of the person"
    
    
    
        full_name = property(my_property)
    
    
    
    class PersonAdmin(admin.ModelAdmin):
    
        list_display = ('full_name',)    


  • list_display_link
    이 필드는mode의change 페이지로 연결됩니다
    class PersonAdmin(admin.ModelAdmin):
    
        list_display = ('first_name', 'last_name', 'birthday')
    
        list_display_links = ('first_name', 'last_name')
    
    

    list_editable
    이 필드는change list 페이지에서 변경할 수 있습니다.그중의 필드도list 에 있어야 합니다display 중입니다.
    list_filter
    이 필드는 필터로 모델을 필터할 수 있습니다.관련 도메인일 수 있습니다.
    class PersonAdmin(admin.UserAdmin):
    
        list_filter = ('company__name',)

    list_max_show_all
    show all 페이지의 모델 수, 200이 부족합니다.
    list_per_page
    change list 페이지마다 모델 수가 100이 부족합니다.
    list_select_related
    selectrelated () 와 관련이 있습니다.
    ordering
    정렬
    paginator
    사용한 페이지.기본django.core.paginator.Paginator .
    prepopulated_fields
    사전 설정 필드.
    radio_fields
    select-box 대신 라디오-button을 사용하십시오.
    class PersonAdmin(admin.ModelAdmin):
    
        radio_fields = {"group": admin.VERTICAL}
    
    

    raw_id_fields
    ForeignKey 또는 ManyToManyField용 필드의 id가 표시됩니다.
    class ArticleAdmin(admin.ModelAdmin):
    
        raw_id_fields = ("newspaper",)
    
    

    readonly_fields
    편집할 수 없는 필드만 읽을 수 있습니다.방법:
    from django.contrib import admin
    
    from django.utils.html import format_html_join
    
    from django.utils.safestring import mark_safe
    
    
    
    class PersonAdmin(admin.ModelAdmin):
    
        readonly_fields = ('address_report',)
    
    
    
        def address_report(self, instance):
    
            # assuming get_full_address() returns a list of strings
    
            # for each line of the address and you want to separate each
    
            # line by a linebreak
    
            return format_html_join(
    
                mark_safe('<br/>'),
    
                '{0}',
    
                ((line,) for line in instance.get_full_address()),
    
            ) or "<span class='errors'>I can't determine this address.</span>"
    
    
    
        # short_description functions like a model field's verbose_name
    
        address_report.short_description = "Address"
    
        # in this example, we have used HTML tags in the output
    
        address_report.allow_tags = True
    
    

    save_as
    Ture로 설정하면 change 페이지의 "Save and add another"버튼이 "Save as"로 대체됩니다.
    save_on_top
    Ture로 설정하면 change 페이지의 맨 위에 save 단추가 있습니다.
    search_fields
    검색 가능 필드.
    view_on_site
    View on site 링크를 표시할지 여부.
    template options
    일부 관리자 템플릿을 사용자 정의할 때 템플릿에 사용할 옵션을 지정합니다.
    add_form_templateadd_view()에 사용되는 템플릿입니다.
    change_form_templatechange_view()에 사용되는 템플릿입니다.
    change_list_templatechangelist_view()에 사용되는 템플릿입니다.
    delete_confirmation_templatedelete_view()에 사용되는 템플릿입니다.
    delete_selected_confirmation_templatedelete_selected action method에서 사용하는 템플릿입니다.
    ModelAdmin.object_history_templatehistory_view () 에서 사용하는 템플릿, 로그.

    좋은 웹페이지 즐겨찾기