2013-04-12 16 views
12

Mam pewne problemy z przesłonięciem zestawu zapytań dla mojego wbudowanego administratora.Przesłanianie zestawu zapytań dla wbudowanego administratora

Oto bog standard rodzic admin inline admin:

class MyInlineAdmin(admin.TabularInline): 
    model = MyInlineModel 
    def queryset(self, request): 
     qs = super(MyInlineAdmin, self).queryset(request) 
     return qs 

class ParentAdmin(admin.ModelAdmin): 
    inlines = [MyInlineAdmin] 
admin.site.register(ParentAdminModel, ParentAdmin) 

Teraz mogę zrobić qs.filter(user=request.user) lub qs.filter(date__gte=datetime.today()) żaden problem.

Potrzebuję jednak instancji MyInlineModel lub instancji ParentAdminModel (nie modelu!), Ponieważ potrzebuję filtrować mój zestaw zapytań na podstawie tego.

Czy można uzyskać coś takiego jak self.instance lub obj (jak w get_readonly_fields() lub get_formset()) wewnątrz metody queryset()?

Mam nadzieję, że to ma sens. Każda pomoc jest doceniana.

+0

http://stackoverflow.com/questions/14950193/how-to-get-the-current-model-instance-from-inlineadmin-in-django może być pomocne –

+0

Należy zauważyć, że w Django 1.6 zmieniono nazwę zestawu zapytań na get_queryset. https://docs.djangoproject.com/en/dev/releases/1.6/#get-query-set-and-similar-methods-renamed-to-get-queryset – jenniwren

Odpowiedz

6
class MyInlineAdmin(admin.TabularInline): 
    model = MyInlineModel 
    def formfield_for_foreignkey(self, db_field, request=None, **kwargs): 
     """enable ordering drop-down alphabetically""" 
     if db_field.name == 'car': 
      kwargs['queryset'] = Car.objects.order_by("name") 
     return super(MyInlineAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) 

class ParentAdmin(admin.ModelAdmin): 
    inlines = [MyInlineAdmin] 

admin.site.register(ParentAdminModel, ParentAdmin) 

Im zakładając, że modele wyglądają mniej więcej tak:

class MyInlineModel(models.Model): 
    car=models.Foreignkey(Car) 
    #blah 

więcej na ten temat; czytaj docs django na formfield_for_foreignkey -> https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_for_foreignkey

+1

To nie działa w ogóle. "Formfield_for_foreignkey" służy do rozwijania i podobnych widżetów. Zobacz [to rozwiązanie] (http://stackoverflow.com/questions/6703652/limit-the-queryset-of-entries-displayed-for-a-django-admin-inline) zamiast tego. – piro

Powiązane problemy