2012-03-31 8 views
0

Wie kann ich die Gültigkeitsprüfung in Admin auf verschiedenen Feldern anwenden, wenn sie voneinander abhängig sind?Feldüberprüfung im Feld "Admin", wenn Felder von anderen Feldern abhängig sind

z.B. Nehmen wir an, ich habe ein Feld A (BooleanField) und ein Feld B (CharField), was ich tun möchte, wenn im Admin-Benutzer das Feld A (Kontrollkästchen) ausgewählt wird und nichts in Feld B eingegeben wird und wenn er versucht zu speichern, es sollte einen Fehler wie ein normales Leerzeichen werfen = False gibt. Also, wie kann ich diese Art von Validierung in Admin durchführen?

Eg Use Case

Ich habe eine Tabelle mit der folgenden Struktur: -

INTERVIEW_TYPES = (

('default', 'None'), 
    ('Paired Visit','Paired Visit'), 
    ('Time Series', 'Time Series'), 

), 

Klasse Interview (models.Model):

ic_number    = models.CharField(verbose_name ="Visit Configuration Number",max_length=20,unique=True,null =True,blank=True) 
ic_description   = models.TextField(verbose_name ="Visit Configuration Description",null = True,blank=True) 
title     = models.CharField(verbose_name ="Visit Configuration Title",max_length=80,unique=True) 
starting_section  = models.ForeignKey(Section) 
interview_type   = models.CharField(verbose_name = "Mapped Visit",choices=CHOICES.INTERVIEW_TYPES, max_length=80, default="Time Series") 
select_rating   = models.CharField(choices=CHOICES.QUESTION_RATING, max_length=80, default="Select Rating") 
view_notes    = models.CharField(choices=CHOICES.VIEW_NOTES, max_length=80, default="Display Notes") 
revisit    = models.BooleanField(default=False) 

..... und so weiter ......

class Meta: 
    verbose_name = 'Visit Configuration' 
    verbose_name_plural = 'Visit Configurations' 
    # ordering = ('rpn_number',) 

def __unicode__(self): 
    return self.title 

Seine admin.py

Klasse InterviewAdmin (admin.ModelAdmin):

list_display = ('id','title', 'starting_section','ic_number','show_prior_responses') 
raw_id_fields = ('starting_section',) 

admin.site.register (Interview, InterviewAdmin)

In admin, Wenn ich das Kontrollkästchen von revisit und in dem field interview_type (welches ein Dropdown mit den Optionen None, Paired Visit, Zeitreihe) anzeigt, wenn ein Benutzer None aus diesem Drop-down ausgewählt hat und dann die Save-Taste drückt, sollte er mir einen Fehler wie ein normales Blank werfen = False zeigt , sagend "T sein Feld wird benötigt "

Wie kann ich diese Art Validierung machen, wo Felder voneinander abhängig sind?

Bitte ignorieren Syntaxfehler ist any.

Dank

Antwort

0

Ich habe in response_change und überwiegender sauberen Methode verwirrt schließlich das, was ich, indem sie eine Modellform in admin.py

Klasse InterviewAdminForm

Überschreibung saubere Methode tat, ist (forms.ModelForm):

class Meta: 
    model = Interview 

def clean(self, *args, **kwargs): 
    cleaned_data = super(InterviewAdminForm, self).clean(*args, **kwargs) 

    if self.cleaned_data['interview_type'] == "default" \ 
    and self.cleaned_data['Revisit'] == True: 
     raise forms.ValidationError({'interview_type': ["error message",]}) 
    return cleaned_data 

Klasse InterviewAdmin (admin.ModelAdmin):

# call the form for Validation 
form = InterviewAdminForm 
....and so on .... 

+0

Kann mir jemand sagen, dass ich die Fehlermeldung direkt über dem Feld anzeigen kann, für das die Validierung angewendet wird. Derzeit wird die Fehlermeldung oben auf der Admin-Seite angezeigt. Ich möchte etwas über diesem Feld zeigen. In diesem Fall sollte es über dem interview_type-Feld sein, wie der Standard-Admin "Dieses Feld ist erforderlich" direkt über diesem Feld anzeigt. Danke im Voraus –

Verwandte Themen