2017-03-06 1 views
0

J'ai un modèle de citation dans mon admin Django, que j'ai mis en place une classe d'admin avec un affichage de la liste de certains de ses champs. L'un de ces champs est un «identifiant de partenaire». J'ai plusieurs fichiers de paramètres différents qui s'étendent à partir d'un fichier de paramètres de base pour l'environnement dans lequel je suis. Dans ces fichiers de paramètres, il existe une variable SHOW_PARTNER_ID. Je veux être en mesure de supprimer partner_id de l'affichage de la liste si SHOW_PARTNER_ID est défini sur false, et vice versa. J'ai une méthode qui retourne une chaîne vide pour chaque ligne de la table de citation qui n'a pas d'identifiant de partenaire, mais je préfère simplement supprimer complètement la colonne.Comment exclure de manière conditionnelle les éléments d'affichage de la liste d'administration de django

class QuoteAdmin(admin.ModelAdmin): 
    list_display = ('date', 'device_model', 'first_name', 'last_name', 'customer_address', 'customer_link', 
        'customer_history', 'site_name', 'status', 'partner_id') 

    def partner_id(self, obj): 
      from django.conf import settings 
      try: 
       if settings.SHOW_PARTNER: 
        if obj.partner: 
         return u'<a href="/admin/quote/partner/{}/">{}</a>'.format(obj.partner.id, obj.partner.id) 
        else: 
         return '' 
       else: 
        return '' 
      except Exception as e: 
       logging.error(e) 
       return '' 

Répondre

3

substituez la méthode get_list_display de votre admin modèle. Le 'original' (source) retourne simplement l'attribut class:

def get_list_display(self, request): 
    """ 
    Return a sequence containing the fields to be displayed on the 
    changelist. 
    """ 
    return self.list_display 

Tout mettre en œuvre une logique plus complexe comme l'ajout/la suppression d'un champ en fonction des paramètres ici, par exemple:

def get_list_display(self, request): 
    if not settings.SHOW_PARTNER: 
     return self.list_display[:-1] 
    return self.list_display 
+0

Ah ! Solution solide, merci schwobaseggl:) – JBT

+0

Comme les pères fondateurs prévu;) – schwobaseggl