2009-09-02 23 views
8

Me gustaría saber cómo mostrar un mensaje de error en el administrador de Django.Django admin, mensaje de error personalizado?

Tengo una sección de usuario privado en mi sitio donde el usuario puede crear solicitudes utilizando "puntos". Una solicitud toma 1 o 2 puntos de la cuenta del usuario (dependiendo de los dos tipos de solicitud), por lo que si la cuenta tiene 0 puntos el usuario no puede hacer ninguna solicitud ... en la sección de usuario privado todo esto está bien, pero el usuario también puede llamar a la compañía y hacer un pedido por teléfono, y en este caso necesito el administrador para mostrar un mensaje de error personalizado en el caso de los puntos de usuario es 0.

Cualquier ayuda será agradable :)

Gracias chicos

Respuesta

20

Una forma de hacerlo es anulando ModelForm para la página de administración. Eso le permite escribir métodos de validación personalizados y devolver errores de su elección de forma muy clara. Me gusta en 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) 

Espero que ayude!

+0

¡Incluso está documentado! http://docs.djangoproject.com/en/dev/ref/contrib/admin/#adding-custom-validation-to-the-admin – adam

4

He utilizado el sistema de mensajes integrado para este tipo de cosas. Esta es la característica que imprime las barras amarillas en la parte superior de la pantalla cuando ha agregado/cambiado un objeto. Usted puede utilizar fácilmente usted mismo:

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

Ver the documentation.

+0

Para un mensaje de error, la validación del formulario es una mejor opción (véase la respuesta de Gabriel). –

+0

Estoy de acuerdo, pero no pensé que fuera claro desde el OP si era un formulario. Al releer, probablemente tengas razón, pero esta es una técnica útil de todos modos. –

+0

Nota: este método funcionó para las versiones de Django <1.2. En 1.2 el marco de mensajes cambió. El enlace de documentación enlaza con los documentos de la versión de desarrollo en lugar de, por ejemplo, los documentos estáticos de 1.1, por lo que ahora es inconsistente con el código anterior. Probablemente valga la pena actualizar el fragmento de código o el enlace de documentos, lo que prefiera. –

Cuestiones relacionadas