为此在互联网上搜索了很多,尝试了很多解决方案,但没有得到它的工作。
我有这些模型。
模型.py
class Cadastro(models.Model):
id_cadastro = models.AutoField(primary_key=True)
categoria_tipo = models.CharField("Categoria", max_length=50, null=True)
chave = models.CharField("Chave", max_length=50, null=False, blank=False)
valor = models.CharField("Valor", max_length=50, null=False, blank=False)
escricao_valor_cadastro = models.TextField("Descrição / Observação", blank=True, null=True)
class Meta:
verbose_name_plural = "Cadastros"
def __str__(self):
return self.valor
class ClasseCNJ(models.Model):
cod_item = models.IntegerField(primary_key=True)
tipo_item = models.CharField(max_length=1)
nome_item = models.CharField(max_length=100)
class Meta:
managed = False
db_table = 'itens'
def __str__(self):
return self.nome_item
class ElementoAutomacao(models.Model):
id_automacao = models.AutoField(primary_key=True)
elemento_automacao = models.ForeignKey('Elemento', on_delete=models.CASCADE, verbose_name="#Elemento", related_name='elemento_automacao', blank=False)
tipo_item = models.ForeignKey('Cadastro', on_delete=models.SET_NULL, related_name='tipo_item', null=True, blank=True,
limit_choices_to={'chave': 'DEST'}, verbose_name="Item Tipo")
item_codigo = models.CharField(max_length=10, blank=True, null=True, verbose_name="#Código")
class Meta:
verbose_name_plural = 'Regras de Automação'
def __str__(self):
return self.elemento_automacao.nome_elemento
def get_item_cnj_desc(self, obj):
if obj.tipo_item == "Movimento":
descr_cnj = ClasseCNJ.objects.get(pk=obj.item_codigo, tipo_item='M')
elif obj.tipo_item == "Classe":
descr_cnj = ClasseCNJ.objects.get(pk=obj.item_codigo, tipo_item='C')
elif obj.tipo_item == "Assunto":
descr_cnj = ClasseCNJ.objects.get(pk=obj.item_codigo, tipo_item='A')
else:
descr_cnj = " - "
return descr_cnj
get_item_cnj_desc.short_description = 'Descrição'
Cadastro 模型是一个通用表,我存储键值数据以填充许多列表框。
ElementoAutomacao 有指向 Cadastro 的tipo_item字段,过滤选项,因此它可以有“Movimento”、“Classe”和“Assunto”以及存储数字的item_codigo字段。
ClasseCNJ 是一个非托管模型。我用它来获取与 ElementoAutomacao 模型的对 tipo_item - item_codigo 关联的描述。
管理员.py
@admin.register(ElementoAutomacao)
class ElementoAutomacaoRegister(admin.ModelAdmin):
list_display = ('elemento_automacao','tipo_item','operacao','item_codigo','get_item_cnj_desc')
但是当我这样做时,我得到了这个错误:
get_item_cnj_desc() missing 1 required positional argument: 'obj'
我错过了什么?