Django admin site (1) ModelAdmin Options
13066 단어 django
admin을 사용하려면 다음 절차를 따르십시오.
from django.contrib import admin
from myproject.myapp.models import Author
class AuthorAdmin(admin.ModelAdmin):
pass
admin.site.register(Author, AuthorAdmin)
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,)
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:
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')
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')
list_display = ('__str__', 'some_other_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'
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 () 에서 사용하는 템플릿, 로그.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django의 질문 및 답변 웹사이트환영 친구, 이것은 우리의 새로운 블로그입니다. 이 블로그에서는 , 과 같은 Question-n-Answer 웹사이트를 만들고 있습니다. 이 웹사이트는 회원가입 및 로그인이 가능합니다. 로그인 후 사용자는 사용자의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.