2

modèlesAjouter une fonction comme un champ à un modèle Django/Python

class A(SiteAwareModel): 

    name = models.CharField(max_length = 255, blank = False) 
    description = models.TextField(blank = True, null = True) 

    class Meta: 
     def key_count(self): 
      return B.objects.count(self) 

Administrateur

class AAdmin(admin.ModelAdmin): 
    list_display = ('key_count') 
    list_filter = ('key_count') 

admin.site.register(A, AAdmin) 

Problème

J'ai un modèle A qui a ses propres champs (nom, description). En outre, le modèle A calcule un nombre de clés en utilisant le modèle B (aucune relation de clé étrangère).

Je souhaite accéder au compte clé dans le panneau d'administration. Je peux voir une colonne dans le sens de l'admin list_display, mais quand j'essaie de l'utiliser dans list_filter, il y a une erreur. 'AAdmin.list_filter 1' fait référence à 'clé_count' qui ne fait pas référence à un champ.

Résultat final

Je veux faire un filtre qui montrerait key_count> 10

Ce que je l'ai fait (sans succès)

Je l'ai déjà essayé de le faire par l'intermédiaire des gestionnaires avec l'aide de THIS blog post

Ce que je ne veux pas

Je ne souhaite pas modifier mon modèle en écrivant de nouvelles migrations.

+0

Cette question est juste pour django 1.3? Quelle est la relation entre A et B s'il n'y a pas de "relation de clé étrangère"? Pourriez-vous montrer les champs "B"? – bsm

+0

J'utilise django 1.3.4 pour être spécifique. Aucune relation FK entre les deux tables. Et B contient un champ commun permet de dire le nom (CharField) et le type (IntegerField) –

Répondre

Questions connexes