2009-09-02 9 views
8

Je voudrais savoir comment afficher un message d'erreur dans l'admin Django.Admin Django, message d'erreur personnalisé?

J'ai une section d'utilisateur privé sur mon site où l'utilisateur peut créer des demandes en utilisant des "points". Une demande prend 1 ou 2 points du compte de l'utilisateur (selon le type de demande), donc si le compte a 0 points l'utilisateur ne peut pas faire de demandes ... dans la section utilisateur privé tout cela est bien, mais l'utilisateur peut aussi appeler l'entreprise et faire une demande par téléphone, et dans ce cas je besoin de l'administrateur pour afficher un message d'erreur personnalisé dans le cas des points de l'utilisateur étant 0.

Toute aide sera agréable :)

Merci les gars

Répondre

20

Une façon de le faire consiste à remplacer le ModelForm pour la page d'administration. Cela vous permet d'écrire des méthodes de validation personnalisées et de renvoyer très proprement les erreurs de votre choix. Comme ceci dans admin.py:

from django.contrib import admin 
from models import * 
from django import forms 

class MyForm(forms.ModelForm): 
    class Meta: 
     model = MyModel 
    def clean_points(self): 
     points = self.cleaned_data['points'] 
     if points.isdigit() and points < 1: 
      raise forms.ValidationError("You have no points!") 
     return points 

class MyModelAdmin(admin.ModelAdmin): 
    form = MyForm 

admin.site.register(MyModel, MyModelAdmin) 

Espérons que ça aide!

+0

C'est même documenté! http://docs.djangoproject.com/fr/dev/ref/contrib/admin/#adding-custom-validation-to-the-admin – adam

4

J'ai utilisé le système de messagerie intégré pour ce genre de chose. C'est la fonction qui imprime les barres jaunes en haut de l'écran lorsque vous avez ajouté/changé un objet. Vous pouvez facilement l'utiliser vous-même:

request.user.message_set.create(message='Message text here') 

Voir the documentation.

+0

Pour un message d'erreur, la validation du formulaire est une meilleure option (voir la réponse de Gabriel). –

+0

D'accord, mais je ne pensais pas que le PO savait clairement si c'était une forme. En relecture, vous avez probablement raison, mais c'est une technique utile quand même. –

+0

Note: cette méthode a fonctionné pour les versions de Django <1.2. En 1.2, le cadre des messages a changé. Le lien de la documentation est lié à la version de développement docs plutôt que, disons, les doc 1.1 statiques, donc maintenant, il est incompatible avec le code ci-dessus. Il serait probablement utile de mettre à jour l'extrait de code ou le lien docs, selon votre préférence. –