Изменение в Django __str__ зависит от поля

Мне нужно показать описание в поле, которое зависит от "TYPE" в другом поле и искать ID, который находится на верхнем уровне. Пример: 3 типа счетов: P - TOP LEVL S - Синтетический A - Аналитический

Нужно показать выпадающий список только "A" и описание с уровнем выше этого.

P: 1st Main
S: 1.1 - база 1
A: 1.1.1 - значение 1 - база 1
A: 1.1.2 - значение 2 - база 1
S: 1.2 - база 2
A: 1.2.1 - значение 1 - база - 2

Моя модель и данные:

class Plano_Conta(models.Model):
    id = models.CharField(max_length=12, primary_key=True)
    descricao = models.CharField(max_length=100)
    tipo = models.CharField(max_length=1, choices=TIPO_CONTA)

    def __str__(self):
        return self.id + ' - ' + self.descricao

    class Meta:
        ordering = ('id',)


class Lancamento(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    plano_conta = models.ForeignKey(Plano_Conta, on_delete=models.CASCADE)
    no_documento = models.CharField(max_length=100)
    data = models.DateTimeField()
    descricao = models.CharField(max_length=100)
    valor = models.DecimalField(max_digits=7, decimal_places=2)
    tipo = models.CharField(max_length=1, choices=TIPO_OPERACAO)

    def __str__(self):
        return self.descricao

    class Meta:
        ordering = ('data',)

база данных:

id   |descricao              |tipo|
-----+-----------------------+----+
1    |Receita                |P   |
1.1  |Vendas Internas        |S   |
1.1.1|Escola                 |A   |
1.1.2|Escritório             |A   |
1.2  |Vendas Externas        |S   |
1.2.1|Livro                  |A   |
1.2.2|Brinquedos             |A   |
2    |Despesas               |P   |
2.1  |Fornecedores           |S   |
2.1.1|Nacional               |A   |
2.1.2|Importado              |A   |
2.2  |Escritório             |S   |
2.2.1|Materiais de limpeza   |A   |
2.2.2|Materiais de Escritório|A   |

Мой администратор:

@admin.register(Lancamento)
class LancamentoAdmin(admin.ModelAdmin):
    list_display = ('data', 'plano_conta', 'no_documento', 'descricao', 'valor', 'tipo', 'user')
    list_filter = ('data', 'plano_conta', 'no_documento', 'descricao', 'valor', 'tipo', 'user')
    search_fields = ('data', 'plano_conta', 'no_documento', 'descricao', 'valor', 'tipo', 'user')

    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "plano_conta":
            kwargs["queryset"] = Plano_Conta.objects.filter(tipo__in=['A'])
        return super().formfield_for_foreignkey(db_field, request, **kwargs)
        
@admin.register(Plano_Conta)
class Plano_ContaAdmin(admin.ModelAdmin):
    list_display = ('id', 'descricao','tipo')
    list_filter = ('id', 'descricao', 'tipo')
    search_fields = ('id', 'descricao', 'tipo')

Я не знаю, смог ли я правильно объяснить!

Спасибо!!!

Вернуться на верх