2015-06-03 20 views
6

Ho due modelli implementati comecome limitare il set di query di un modello inline in Django Admin

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 

ora mi definisco un un amministratore e registrarlo con B come una sottoclasse di TabularInline.I chiedersi se si tratta di è possibile in qualche modo filtrare la lista di oggetti B prima che il formset inline sia renderizzato, quindi non tutti gli oggetti B correlati fanno A entrare nel formset solo quelli il cui parametro utente corrisponde all'utente attualmente loggato si presenta!

risposta

13

utilizzare il metodo get_queryset: https://docs.djangoproject.com/en/stable/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_queryset

dovrebbe essere simile:

class BAdmin(admin.TabularInline): 
    ... 

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

grazie un gruppo .Si lavorato come un fascino! . Se potessi disturbarti per un'altra cosa, perché la nostra funzione sovrascritta chiama la sua superclasse TabularInline. – krishnan

+0

La chiamata superclasse ottiene il queryset iniziale che filtra sul modello A. – noamk