2016-03-24 10 views
1

In meinem ModelAdmin habe ich zwei Aggregatwerte berechnet und möchte diese mit einem Widget anzeigen.Verwenden eines Widgets für den Aggregatwert in Django Admin

def get_queryset(self, request): 
     qs = super(QuizAdmin, self).get_queryset(request).annotate(
      avg_difficulty=Avg('ratings__difficulty'), 
      avg_rating=Avg('ratings__rating'), 
     ) 
     return qs.filter(author__agents=request.user) 

Im Moment mache ich diese

def avg_difficulty(self, obj): 
     return StarRatingWidget().render(attrs={'id': 'id_avg_difficulty'},name="avg_difficulty", value=obj.avg_difficulty, readonly=True) 

Gibt es eine einfachere und flexiblere Art und Weise ein Widget für einen Gesamtwert zu benutzen? Die Registrierung in ModelForm scheint nicht zu funktionieren.

Antwort

1

Dies ist der richtige Weg, wenn Ihr Widget nur für diesen Fall verwendet wird, benötigen Sie nicht einmal ein Widget. Zum Beispiel könnten Sie tun:

from django.utils.html import format_html 

class MyModelAdmin(admin.ModelAdmin): 

    readonly_fields = ['avg_difficulty'] 

    def avg_difficulty(self, obj): 
     return format_html(
      ('<span id="id_avg_difficulty" class="rater" ' 
      'data-value="{}"></span>'), obj.avg_difficulty) 
    avg_difficulty.short_description = "Average difficulty" 
+0

Ich möchte das Widget mehrmals als Eingabe und als schreibgeschütztes Widget verwenden. Ich habe das Problem, dass ich es für Listenelemente im Admin verwenden möchte, aber wenn ich das tue, werden die Ressourcen in der Media-Klasse nicht geladen. Haben Sie eine Idee, wie Sie dieses Problem lösen können? – Silvester

+1

Sie können einem ModelAdmin auch eine Media-Klasse hinzufügen: https://docs.djangoproject.com/en/1.9/ref/contrib/admin/#modeladmin-asset-definitions –

Verwandte Themen