2011-07-25 9 views
7

save_modelのDjango管理ページの機能でカスタムエラーメッセージを返したいと思います。もちろんモデル保存中にDjango adminがカスタムエラーメッセージを返す

class EmployerAdmin(admin.ModelAdmin): 
    exclude = ('update_user','updatedate','activatedate','activate_user') 

    def save_model(self, request, obj, form, change): 
    if obj.department != None and obj.isDepartmentSuggested: 
     obj.isDepartmentSuggested =False 
    else: 
     return "You don't set a valid department. Do you want to continue ?" 

    obj.update_user = request.user 
    obj.updatedate = datetime.datetime.now() 
    obj.save() 

Else一部が正しくありませんが、私は私が欲しいものを説明したいと思います。

私はそれを行うための方法やドキュメントを提案してうれしいです。あなたのEmployerAdminであなたの検証を行うために、フォームを使用する必要が おかげ

答えて

10

:あなたを助け

#forms.py 
from your_app.models import Employer 

class EmployerAdminForm(forms.ModelForm): 
    class Meta: 
     model = Employer 

    def clean(self): 
     cleaned_data = self.cleaned_data 
     department = cleaned_data.get('department') 
     isDepartmentSuggested = cleaned_data.get('isDepartmentSuggested') 
     if department == None and not isDepartmentSuggested: 
      raise forms.ValidationError(u"You haven't set a valid department. Do you want to continue?") 
     return cleaned_data 

#admin.py 
from django.contrib import admin 
from your_app.forms import EmployerAdminForm 
from your_app.models import Employer 

class EmployerAdmin(admin.ModelAdmin): 
    exclude = ('update_user','updatedate','activatedate','activate_user') 
    form = EmployerAdminForm 

admin.site.register(Employer, EmployerAdmin) 

希望。

+0

ありがとうございました。それが私が望むものです。エラーメッセージの隣にあるポップアップボックスまたは[続行]ボタンをどのようにレンダリングできますか?または、私は:) – brsbilgic

+1

最初に、あなたが選択をしていなくても人々を続行させたいので、それが適用される場合は、関連フィールドを必須ではなく、そして/またはnullableに設定する必要があります。ポップアップを行うには、JavaScriptの「確認」ダイアログが必要です。いくつかのアイデアを得るにはhttp://jqueryui.com/demos/dialog/#modal-confirmationを見てください。 – Brandon

+0

アップロードされたファイルを追加の方法で確認してからエラーを返す場合に、私の場合の解決方法を教えてください。 – andi

0

私はDjango 1.6.3を使用しています。私はBrandonの答えに追加したいと思います。

クラスの下に別の行としてadmin.site.register(Employer, EmployerAdmin)を追加します。すなわち、form = EmployerAdminForm以下、インデントされていません。

なぜ私はBrandonの答えがうまくいかず、検証が実行されていなかったことを理解するまでに時間がかかりました。明らかに、まずadminに登録する必要があります。

乾杯。

+0

これは質問に対する答えを提供しません。批評をしたり、著者の説明を求めるには、自分の投稿の下にコメントを残してください。自分の投稿にいつもコメントをつけることができます。そして、十分な[評判](http://stackoverflow.com/help/whats-reputation) [任意の投稿にコメントする]ことができます(http://stackoverflow.com/help/privileges/comment)。 –

+0

問題は、私は十分なポイントを持っていないし、以前に遭遇した面倒を他の人に救うためにこれを共有するべきだと感じた。 :) –

+0

申し訳ありません、私は管理者登録を中止しました。私は私の答えを更新しました。 – Brandon

関連する問題