2009-09-02 13 views
8

Chciałbym wiedzieć, jak wyświetlić komunikat o błędzie w administratorze Django.Administrator Django, niestandardowy komunikat o błędzie?

Mam prywatną sekcję użytkowników w mojej witrynie, gdzie użytkownik może tworzyć żądania za pomocą "punktów". Żądanie pobiera 1 lub 2 punkty z konta użytkownika (w zależności od rodzaju żądania), więc jeśli konto ma 0 punktów, użytkownik nie może wysyłać żadnych żądań ... w sekcji użytkownika prywatnego wszystko w porządku, ale użytkownik można również zadzwonić do firmy i złożyć zamówienie przez telefon, a w tym przypadku muszę się z administratorem, aby pokazać niestandardowy komunikat o błędzie w przypadku punktów użytkownika jest 0.

Każda pomoc będzie miło :)

Dzięki chłopaki

Odpowiedz

20

Jednym ze sposobów na to jest zastąpienie ModelForm dla strony administratora. To pozwala na pisanie niestandardowych metod walidacji i zwracanie błędów z twojego wyboru bardzo czysto. W ten sposób 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) 

Mam nadzieję, że pomoże!

+0

Jest to nawet udokumentowane! http://docs.djangoproject.com/en/dev/ref/contrib/admin/#adding-custom-validation-to-the-admin – adam

4

Użyłem wbudowanego systemu wiadomości do tego typu rzeczy. Jest to funkcja, która drukuje żółte paski u góry ekranu po dodaniu/zmianie obiektu. Możesz z łatwością używać go samodzielnie:

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

Zobacz the documentation.

+0

dla komunikatu o błędzie, walidacja formularza jest lepszym rozwiązaniem (patrz odpowiedź Gabriela). –

+0

Zgadzam się, ale nie sądziłem, że z OP było jasne, czy to była forma. Jeśli chodzi o ponowne czytanie, prawdopodobnie masz rację, ale i tak jest to przydatna technika. –

+0

Uwaga: ta metoda działała dla wersji Django <1.2. W wersji 1.2 struktura komunikatów uległa zmianie. Łącze do dokumentacji zawiera linki do dokumentacji wersji rozwojowej zamiast, powiedzmy, statyczne dokumenty 1.1, więc teraz jest niezgodne z powyższym kodem. Prawdopodobnie warto zaktualizować fragment kodu lub link do dokumentu, w zależności od tego, co wolisz. –

Powiązane problemy