2017-03-28 4 views
1

Ich habe eine Django-Admin-Klasse, die einen Inline-Iterablen deklariert. Etwas wie:DjangoAdmin: Zugriff auf die übergeordnete Instanz innerhalb eines Inline-Administrators

@admin.register(Category) 
class CategoryAdmin(admin.ModelAdmin): 
    ... 
    ... 
    inlines = [CategoryModifiersInline,] 
    ... 
    ... 

Dann habe ich eine Inline-Admin-Klasse wie folgt:

class CategoryModifiersInline(admin.TabularInline): 

    model = Category.modifiers.through 
    fk_name = 'category' 
    extra = 1 


    def formfield_for_foreignkey(self, db_field, request, **kwargs): 
     qs = Product.objects.filter(is_modifier=True).filter(active=True) 
     kwargs['queryset'] = qs 
     return super(CategoryModifiersInline, self).formfield_for_foreignkey(db_field, request, **kwargs) 

Wo ich die queryset für den Fremdschlüssel basierend auf einigen Geschäftsanforderungen filtern.

Diese Inline wird dem Benutzer nur in der Ansicht 10 angezeigt, dh wenn ein Objekt der Klasse Category erstellt wird und der Benutzer Modifizierer hinzufügen möchte, niemals in der Ansicht add.

Was ich tun möchte, ist das Filtern des Fremdschlüssels nach einem der Attribute des Category-Modells, ich meine, ich möchte auf das übergeordnete Objekt von der formfield_for_foreignkey Methode zugreifen.

Kennt jemand einen Weg, um das zu erreichen?

Antwort

0

Nun, ich fand eine similar question hier in StackOverflow, und verwendet die dort beschriebene Methode, um es zu lösen.

Es verwendet das parent_model Attribut von Inlines und die resolve Methode von django.core.urlresolvers, um die Instanz in der URL zu erhalten.

Hier ist der Code:

def get_object(self, request): 
     resolved = resolve(request.path_info) 
     if resolved.args: 
      return self.parent_model.objects.get(pk=resolved.args[0]) 
     return None 

Dann würde ich die get_object Methode in meiner formfield_from_foreignkey Methode aufrufen, die Instanz des Objekts zu erhalten ich als Filter verwenden möchten.

Hoffe es hilft!

Verwandte Themen