2015-06-03 15 views
6

Ich habe zwei wiewie die queryset eines Inline-Modell in django admin begrenzen

implementierten Modelle
class A(models.Model): 
    a_name = models.CharField(max_length=50) 

class B(models.Model): 
    a = models.ForeignKey(A) 
    b_tag = models.CharField(max_length=50) 
    user=models.ForeignKey(User)    # stores username 

jetzt definieren i A ein Admin und registrieren Sie es mit B als eine Unterklasse zu TabularInline.I frage mich, ob es irgendwie möglich, die Liste der B-Objekte zu filtern, bevor das Inline-Formset gerendert wird, also nicht alle B-Objekte, die A in das Formset bringt, nur diejenigen, deren Benutzerparameter mit dem aktuell angemeldeten Benutzer übereinstimmt!

Antwort

13

die get_queryset Methode verwenden:

class BAdmin(admin.TabularInline): 
    ... 

    def get_queryset(self, request): 
     qs = super(BAdmin, self).get_queryset(request) 
     return qs.filter(user=request.user) 
+0

dank ein Haufen .Es arbeitete wie ein Charme: https://docs.djangoproject.com/en/stable/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_queryset

aussehen sollte! . Wenn ich dich noch für eine Sache stören könnte, warum ruft unsere überschriebene Funktion ihre Oberklasse TabularInline auf. – krishnan

+0

Der Superklassenaufruf ruft den anfänglichen Abfragesatz ab, der das A-Modell filtert. – noamk

Verwandte Themen