7
votes

Commander des modèles Django par une méthode dans le modèle

Alors, disons que j'ai des modèles comme celui-ci: xxx

alors c'est le modèleAdmin: xxx

Ça jette une erreur quand je Allez sur le site d'administration indiquant que "DernierCommerment" n'a pas été trouvé dans App.foo. L'avoir dans list_display fonctionne bien. Donc, ma question est la suivante: existe-t-il un moyen de commander des modèles dans List_Display par des méthodes du modèle? Et si oui, comment?


0 commentaires

3 Réponses :


1
votes

Commander est une fonctionnalité de niveau SQL et votre base de données ne sait rien sur les méthodes de votre modèle.

Cependant, vous pouvez ré-trier après le fait en convertissant votre queryset sur une liste, puis en utilisant quelque chose comme trié . Voir: http://wiki.python.org/moin/howto/sort/

Pour ce que ça vaut la peine, je doute que la liste triée fonctionnera dans l'administrateur. Je pourrais avoir tort, mais je suis à peu près sûr que Django a besoin de rester un query.


0 commentaires


3
votes

Je n'ai pas testé le code, mais simplement comme une idée d'essayer de mettre en oeuvre cela avec le requérant de la méthodeDmin avec une fonction d'annotation pour trier sur un champ à partir de champ associé:

class FooAdmin(admin.ModelAdmin):
    def queryset(self, request):
        qs = super(FooAdmin, self).queryset(request)

        return qs.distinct() \
        .annotate(date_of_last_comment=Max('comment__date')) \
        .order_by('-date_of_last_comment')


1 commentaires

Cela fonctionne bien, juste un problème. Il n'ya aucun moyen de revenir à cette commande une fois que cela a été changé (à un nom, s'il y avait un champ pour cela). Mais merci, cela devrait faire au moins un moment.