2009-07-07 9 views
0

Quelqu'un peut-il me dire comment je peux limiter les choix pour le modèle Page dont j'hérite dans le code suivant?Héritage de modèle Django et limiter_choices_to

class CaseStudy(Page): 
    """ 
    An entry in a fancy picture flow widget for a case study page 
    """ 
    image = models.ForeignKey(Image, limit_choices_to={'is_active': True, 'category__code':'RP'}) 

    def __unicode__(self): 
     return u"%s" % self.title 

L'administrateur django limite les choix d'images dans un menu déroulant avec succès, mais je voudrais limiter un champ dans le modèle de page et (un « champ de page parent »), à savoir:

class Page(models.Model): 
    parent    = models.ForeignKey('self', blank=True, null=True, related_name='children') 

Répondre

0

J'ai réussi à résoudre ce problème en remplaçant le formulaire du modèle d'administration. Je me rends compte que cela pourrait être resserré, mais je pensais que cela pourrait être utile à quelqu'un là-bas. Voici un extrait de l'admin.py

class CaseStudyForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(CaseStudyForm, self).__init__(*args, **kwargs) 

     recent_project_page = Page.objects.get(title="Recent Projects")   
     parent_widget = self.fields['parent'].widget 
     choices = [] 
     for key, value in parent_widget.choices: 
      if key in [recent_project_page.id,]: 
       choices.append((key, value)) 
     parent_widget.choices = choices 


class CaseStudyAdmin(admin.ModelAdmin): 
    form = CaseStudyForm 

admin.site.register(CaseStudy, CaseStudyAdmin)