Изменение в 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')
Я не знаю, смог ли я правильно объяснить!
Спасибо!!!