Django: acessando a instância do modelo a partir do ModelAdmin?

Eu tenho um modelo para pedidos em um aplicativo de loja virtual, com uma chave primária de incremento automático e uma chave estrangeira, já que os pedidos podem ser divididos em vários pedidos, mas a relação com o pedido original deve ser mantid

class Order(models.Model):
    ordernumber = models.AutoField(primary_key=True)
    parent_order = models.ForeignKey('self', null=True, blank=True, related_name='child_orders')
    # .. other fields not relevant here

Registrei uma classe OrderAdmin no site de administração. Para a visualização de detalhes, incluíparent_order nofieldsets attribute. Obviamente, por padrão, isso lista todos os pedidos em uma caixa de seleção, mas esse não é o comportamento desejado. Em vez disso, para pedidos que não têm um pedido pai (ou seja, não foram divididos de outro pedido;parent_order é NULL / Nenhum), nenhum pedido deve ser exibido. Para pedidos que foram divididos, isso deve exibir apenas o pedido de mãe solteir

Existe um novo método ModelAdmin disponível,formfield_for_foreignkey, isso parece perfeito para isso, pois o conjunto de consultas pode ser filtrado dentro dele. Imagine que estamos olhando para ele, a exibição detalhada do pedido nº 11234, que foi dividido do pedido nº 11208. O código está abaixo de

def formfield_for_foreignkey(self, db_field, request, **kwargs):
    if db_field.name == 'parent_order':
        # kwargs["queryset"] = Order.objects.filter(child_orders__ordernumber__exact=11234)
        return db_field.formfield(**kwargs)
    return super(OrderAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

A linha comentada funciona quando executada em um shell Python, retornando um conjunto de consultas de item único contendo o pedido nº 11208 para o nº 11234 e todos os outros pedidos que possam ter sido separados del

Certamente, não podemos codificar o número do pedido lá. Precisamos de uma referência aoordernumber campo da instância do pedido cuja página de detalhes estamos vendo. Como isso

kwargs["queryset"] = Order.objects.filter(child_orders__ordernumber__exact=?????)

Não encontrei nenhuma maneira de substituir ????? com uma referência à instância "atual" do pedido, e eu me aprofundou bastante.self dentroformfield_for_foreignkey refere-se à instância ModelAdmin e, embora isso tenha ummodel, não é a instância do modelo de pedido (é uma referência ModelBase; self.model () retorna uma instância, mas seu número de ordem é Nenhum

ma solução pode ser extrair o número do pedido de request.path (/ admin / orders / order / 11234 /), mas isso é realmente feio. Eu realmente gostaria que houvesse uma maneira melhor.

questionAnswers(6)

yourAnswerToTheQuestion