Maison >développement back-end >Tutoriel Python >Djangoadminsite(二)MéthodesModelAdmin
Méthodes ModelAdmin
save_model(request, obj, form, change)
Cette méthode est le comportement lors de l'enregistrement des instances de modèle pour les utilisateurs de l'interface d'administration. request est une instance HttPRequest, obj est une instance de modèle, form est une instance ModelForm et change est une valeur booléenne, selon que l'instance de modèle est nouvelle ou modifiée.
Le remplacement de cette méthode peut effectuer certaines actions avant ou après l'enregistrement.
Par exemple, vous pouvez enregistrer request.user comme attribut de l'instance de modèle :
from django.contrib import admin
class ArticleAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
obj.user = request.user
obj.save()
delete_model(request, obj)
Méthode selon laquelle l'utilisateur de l'interface d'administration supprime l'instance de modèle.
save_formset(request, form, formset, change)
La méthode permettant aux utilisateurs de l'interface d'administration de sauvegarder le jeu de formulaires peut être réécrite :
class ArticleAdmin(admin.ModelAdmin):
def save_formset(self, request, form, Formset, change):
instances = formest.save(commit=False)
par exemple dans les instances :
instance.user = request.user
instance. save()
formest.save_m2m()
get_ordering(request)
Trier.
class PersonAdmin(admin.ModelAdmin):
def get_ordering(self, request):
if request.user.is_superuser:
return ['name', 'rank' ]
else :
return ['name']
get_search_results(request, queryset, search_term)
Vous pouvez personnaliser les résultats de la requête.
save_rated(request, form, formsets, change)
formets est une liste d'ensembles de formulaires en ligne du modèle. Comportement lors de l'enregistrement des objets liés au modèle.
def save_rated(self, request, form, formsets, change):
"""
Étant donné le ``HttpRequest``, l'instance ``ModelForm`` parent, le
liste des ensembles de formulaires en ligne et une valeur booléenne selon que le
parent est ajouté ou modifié, enregistrez les objets associés dans la base de données
Notez qu'à ce stade, save_form() et save_model() ont déjà
. a été appelé. >get_readonly_fields(request, obj=None)
Renvoyer les champs en lecture seule.
get_prepopulated_fields(request, obj=None)
Champs de retour.
get_fieldsets(request, obj=None)
Renvoyer les ensembles de champs. get_list_filter(request)Retour list_filter.
Renvoyer search_fields.
Renvoie une liste ou un tuple d'objets InlineModelAdmin
def get_inline_instances(self, request, obj =Aucun) :
return [inline(self.model, self.admin_site) for inline in self.inlines]
get_urls()
class MyModelAdmin(admin.ModelAdmin):
def get_urls(self):
urls = super(MyModelAdmin, self).get_urls()
(r'^my_view/$', self.my_view)
)
def my_view(self, request):
# vue personnalisée qui devrait renvoyer une HttpResponse
Pass
Le chemin de la méthode my_view ci-dessus est /admin/myapp/mymodel/my_view/.
Cependant, il n'y a pas de vérification ni de mise en cache dans l'exemple ci-dessus. La vérification et la mise en cache doivent être fournies :
class MyModelAdmin(admin.ModelAdmin):
def get_urls(self):
urls = super(MyModelAdmin, self).get_urls()
my_urls = patterns('',
(r '^my_view/$', self.admin_site.admin_view(self.my_view))
) )
renvoie les URL my_urls
Si la page peut être mise en cache mais que la vérification des autorisations est toujours requise :
(r'^my_view/$', self.admin_site.admin_view(self.my_view, cacheable=True))
get_form(request, obj=None, ** kwargs)
Renvoie le ModelForm utilisé par l'ajout et la modification de vues. Certains champs seront masqués lorsque l'utilisateur ci-dessous n'est pas superutilisateur.
class MyModelAdmin(admin.ModelAdmin):
def get_form(self, request, obj=None, **kwargs):
self.exclude = []
if not request.user .is_superuser :
à obj=Aucun )
Rend InlineModelAdmins à utiliser dans les vues d'ajout et de modification de l'administrateur.
Si vous souhaitez uniquement afficher un inline spécial dans la vue de modification :
class MyModelAdmin( admin.ModelAdmin):
inlines = [MyInline, SomeOtherInline] def get_formsets(self, request, obj=None): pour inline dans self.get_inline_instances( requête, obj):
🎜>
get_formsets_with_inlines( request, obj=None)
Paires de rendements (FormSet, InlineModelAdmin) à utiliser dans l'ajout et la modification de vues par l'administrateur.
Si vous souhaitez uniquement afficher un inline spécial dans la vue des modifications :
class MyModelAdmin(admin.ModelAdmin):
inlines = [MyInline, SomeOtherInline]
def get_formsets_with_inlines(self, request, obj=None):
pour l'inline dans self.get_inline_instances( request, obj):, obj), inline
formfield_for_foreignkey(db_field, request, **kwargs)Le champ de formulaire par défaut utilisé par le champ Foreignkey. Renvoie différents sous-ensembles selon différents utilisateurs :
class MyModelAdmin(admin.ModelAdmin) :
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "car":
kwargs["queryset"] = Car.objects.filter(owner=request .user)
return super(MyModelAdmin, self).formfield_for_foreignkey(db_field, request , **kwargs)
formfield_for_manytomany(db_field, request, **kwargs)
Similaire Pour formfield_for_foreignkey, cette méthode est utilisée pour plusieurs à plusieurs champs. :
def formfield_for_manytomany(self, db_field, request, **kwargs):
if db_field name == "Cars":
KWARGS ["querySet"] = car.objects.filter (owner = request.user)
Return Super (MyModeladmin, Self) .formfield_manytomany (DB_F Ield, Request, ** KWARGS)
Similaire à formfield_for_foreignkey et formfield_for_manytomany, cette méthode est utilisée pour les choix :
class MyModelAdmin(admin.ModelAdmin) :
def formfield_for_choice_field(self, db_field, request, ** kwargs): if db_field.name == "status":
kwargs['choices'] = (
('accepter ed', 'Accepté'),
('refusé', ' Refusé'),
)
if request.user.is_superuser:
return super(MyModelAdmin, self).formfield_for_choice_field(db_field, request, **kwargs)
ModelAdmin.get_changelist(request, **kwargs)
返回changelist页面使用的Changelis类. 缺省django.contrib.admin.views.main.ChangeList。
ModelAdmin.get_changelist_form(request, **kwargs)
返回changelist页面使用的ModelForm类。
à partir de l'importation de Django form
class MyForm(forms.ModelForm):
pass
class MyModelAdmin(admin.ModelAdmin):
def get_changelist_form(self, request, **kwargs):
retourner MyForm
ModelAdmin.get_changelist_formset(request, **kwargus)
返回changelist页面使用的ModelFormSet类。
de django.forms.models importer BaseModelFormSet
class MyAdminFormSet(BaseModelFormSet):
pass
class MyModelAdmin(admin.ModelAdmin):
def get_changelist_formset(self, request, **kwargs):
kwargs['formset' ] = MyAdminFormSet
return super(MyModelAdmin, self).get_changelist_formset(request, **kwargs)
ModelAdmin.has_add_permission(request)
是否具有add权限。
ModelAdmin.has_change_permission(request, obj=None)
是否具有change权限。
ModelAdmin.has_delete_permission(request, obj=None)
是否具有delete权限。
ModelAdmin .get_queryset(request)
返回admin界面可编辑的model QuerySet集。 Nom de l'utilisateur返回不同的结果:
class MyModelAdmin(admin.ModelAdmin):
def get _queryset(soi, demande ):
qs = super(MyModelAdmin, self).get_queryset(request)
if request.user.is_superuser:
return qs
return qs.filter(author=request.user)
ModelAdmin.message_user(request, message, level=messages.INFO, extra_tags='', fail_silently=False)
向使用django.contrib.messages backend的用户发送信息。
ModelAdmin.get_paginator(queryset, per_page, orphans=0, allow_empty_first_page=True)
返回一个分页实例。Renvoie une instance du paginateur à utiliser pour cette vue. Par défaut, instancie une instance de paginator.
ModelAdmin.response_add(request, obj, post_url_continue=None)
决定add_view()的HttpResponse,model被创建后运行。
ModelAdmin .response_change(request, obj)
决定change_view()的HttpResponse,model被修改后运行。
ModelAdmin.response_delete(obj_display)
决定delete_view()的HttpResponse, modèle被删除后运行。
obj_display是被删除对象的name。
ModelAdmin.get_changeform_initial_data(request)
Un hook pour les données initiales sur les formulaires de changement d'administrateur. Par défaut, les champs reçoivent les valeurs initiales des paramètres GET. Par exemple, ?name=initial_value définira la valeur initiale du champ de nom sur initial_value.
Cette méthode devrait renvoyer un dictionnaire sous la forme {'fieldname': 'fieldval'}:
def get_changeform_initial_data(self, request):
return {'name': 'custom_initial_value'}
Autres méthodes
ModelAdmin.add_view(request, form_url='', extra_context= Aucun)
Vue Django pour la page d'ajout d'instance de modèle. Voir la note ci-dessous.
ModelAdmin.change_view(request, object_id, form_url='', extra_context=None)
Vue Django pour la page d'édition de l'instance de modèle. Voir la note ci-dessous.
ModelAdmin.changelist_view(request, extra_context=None)
Vue Django pour la page de liste/actions de modification des instances de modèle. Voir la note ci-dessous.
ModelAdmin.delete_view(request, object_id, extra_context=None)
Vue Django pour la page de confirmation de suppression des instances de modèle. Voir la note ci-dessous.
ModelAdmin.history_view(request, object_id, extra_context=None)
Vue Django pour la page qui affiche l'historique des modifications pour une instance de modèle donnée.
这5个La vue de Django est basée sur les données contextuelles :
classe MyModelAdmin (. Administrateur modèle) :
# Un modèle pour une vue de modification très personnalisée :
change_form_template = 'admin/myapp/extras/openstreetmap_change_form.html'
def get_osm_info(self):
# ...
pass
def change_view(self, request, object_id, form_url='', extra_context=None):
extra_context = extra_context ou {}
extra_context['osm_data'] = self.get_osm_info()
return super(MyModelAdmin, self).change_view(request, object_id,
form_url, extra_context=extra_context)
Définitions des actifs ModelAdmin
为ModelAdmin的 ajouter/modifier des vues添加js et CSS:
Class ArticleAdmin (admin.modeladmin) :
Class Media :
CSS = {
"ALL": ("My_styles.css",)
🎜> js = ("My_Codee .js ",)
def clean_name(self ; The ci-dessus est le contenu de Djangoadminsite (2) ModelAdminmethods Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !