Django admin: Inline direto para o segundo nível de relacionamento

Eu tenho três níveisInvoice modelo que eu gostaria de exibir na área de administração do Django ... em uma "espécie deespecial" maneira.

Permitam-me fornecer um pouco de plano de fundo:

CadaInvoice é conformado por váriosSubInvoice(s) e cadaSubInvoice é conformado por váriosInvoiceItem(s), que contêm uma discriminação dasProducts adquirido por um cliente.

Logicamente falando, seria algo assim (espero que a arte ascii funcione)

+---------- Invoice id=3 -----------+
|       Full total: $100.00         |
|                                   |
|  +----- Sub Invoice id=1 -----+   |
|  |      Subtotal $70          |   |
|  |                            |   |
|  |    Item 1 in SubInv.1      |   |
|  |    Item 2 in SubInv.1      |   |
|  |    Item 3 in SubInv.1      |   |
|  |____________________________|   |
|                                   |
|  +----- Sub Invoice id=2 -----+   |
|  |      Subtotal $30          |   |
|  |                            |   |
|  |    Item 1 in SubInv.2      |   |
|  |    Item 2 in SubInv.2      |   |
|  |____________________________|   |
|                                   |
|___________________________________|

Os modelos parecem mais ou menos (eles foram simplificados para esta pergunta) como:

class Invoice(models.Model):
    full_total = DecimalField(...)
    # has a .sub_invoices RelatedManager through a backref from SubInvoice

class SubInvoice(models.Model):
    sub_total = DecimalField(...)
    invoice = ForeignKey('server.Invoice', related_name='sub_invoices')
    # has an .items RelatedManager through a backref from InvoiceItem

class InvoiceItem(models.Model):
    sub_invoice = ForeignKey('server.SubInvoice', related_name='items')
    product = ForeignKey('server.Product', related_name='+')
    quantity = PositiveIntegerField(...)
    price = DecimalField(...)

Agora, eu sei que o aninhamento de dois níveis de relacionamento no Django Admin é muito complexo e não estou tentando aninhar oInvoiceItem noSubInvoice e aninhe aquele noInvoice. Isso seria ótimo, mas estou pronto para desistir disso devido às dificuldades das linhas aninhadas.Não: o que eu gostaria de fazer é mostrar oInvoice e, comoinline, EstáItems, "pulando" atravésInvoice.sub_invoices__items. Eu realmente não me importo muito com as informações mostradas noSubInvoice(s), mas me preocupo com as informações noInvoice E noInvoiceItems.

O que quero dizer é que, basicamente, eu gostaria (ou"Eu poderia viver com") se oInvoice A visualização de administração tinha a seguinte aparência:

+---------- Invoice id=3 -----------+
|       Full total: $100.00         |
|                                   |
|  +----------------------------+   |
|  |                            |   |
|  |    Item 1 in SubInv.1      |   |
|  |    Item 2 in SubInv.1      |   |
|  |    Item 3 in SubInv.1      |   |
|  |    Item 1 in SubInv.2      |   |
|  |    Item 2 in SubInv.2      |   |
|  |____________________________|   |
|                                   |
|___________________________________|

(InvoiceItems como uma linha doInvoicesem mostrar qualquer informação sobre oSubInvoices iniciar)

Eu tentei o seguinte noadmin.py:

class InvoiceItemInline(admin.StackedInline):
    fk_name = 'sub_invoice__invoice'
    model = InvoiceItem

class InvoiceAdmin(admin.ModelAdmin):
    inlines = (InvoiceItemInline,)

Mas isso me dá um erro:

<class 'server.admin.invoices.InvoiceItemInline'>: (admin.E202) 'server.InvoiceItem' has no field named 'sub_invoice__invoice'.

Eu também tentei diretamente isso:

class InvoiceItemInline(admin.StackedInline):
    model = InvoiceItem

class InvoiceAdmin(admin.ModelAdmin):
    inlines = (InvoiceItemInline,)

Mas então (este que eu estava esperando) produz este erro:

<class 'server.admin.invoices.InvoiceItemInline'>: (admin.E202) 'server.InvoiceItem' has no ForeignKey to 'server.Invoice'.

Existe alguma maneira de conseguir isso? Agradeço antecipadamente.

PS:

A partir de agora, tenho uma solução "remendada" que parece ser a maneira canônica:

Registre oInvoice modelo.Registrar umadmin.ModelAdmin na linha para oSubInvoice (este inline será "inline" no diretórioInvoiceModelAdmin).Registre também oSubInvoice no administrador, para que possamos calcular um link para sua visualização de administrador.Adicione umna linha vista doInvoiceItems para o mencionado acimaSubInvoicevista deAdicione um link à visualização de administrador doSubInvoice(s) noInvoice

Praticamente o que é descrito neste outroTÃO. responda.

Mas o problema com essa abordagem é que ela não me deixa ver oInvoice e os seusInvoiceItemsde relance (vejo a fatura, com sub_invoices nela e, em seguida, dentro das sub_invoices inline, há um link para os InvoiceItems nos quais preciso clicar para ver os itens). Seria ótimo se eu pudesse me livrar da necessidade desse link.

Isto é o que eu tenho agora, basicamente:

+---------- Invoice id=3 -----------+
|       Full total: $100.00         |
|                                   |
|  +----- Sub Invoice id=1 -----+   |       +--- Sub Invoice id=1 ---+
|  |      Subtotal $70          |   |       |   Item 1 in SubInv.1   |
|  |                            |   |       |   Item 2 in SubInv.1   |
|  |    <a>Click for items ==============>  |   Item 3 in SubInv.1   |
|  |____________________________|   |       |________________________|
|                                   |
|  +----- Sub Invoice id=2 -----+   |
|  |      Subtotal $30          |   |       +--- Sub Invoice id=2 ---+
|  |                            |   |       |   Item 1 in SubInv.2   |
|  |    <a>Click for items ==============>  |   Item 2 in SubInv.2   |
|  |____________________________|   |       |________________________|
|                                   |
|___________________________________|

questionAnswers(1)

yourAnswerToTheQuestion