Как показать поля FK в админке? DJANGO
Я разрабатываю сайт электронной коммерции и пытаюсь показать в ADMIN связанный с 'produto_nome' в моей таблице 'Ordem'. Пока что в моем админе в таблице 'Ordem' отображается только id каждого объекта. Возможно ли показать поле 'produto_nome' в этой таблице?
Ниже представлены мои модели
class Categoria(models.Model):
nome = models.CharField(max_length=50)
def __str__(self):
return self.nome
class Produto(models.Model):
produto_nome = models.CharField(max_length=70)
preco = models.IntegerField()
quantidade_em_estoque = models.IntegerField()
quantidade_vendida = models.IntegerField()
categoria = models.ForeignKey(Categoria, on_delete=models.CASCADE)
descricao = models.TextField(default='', blank=True, null=True)
slug = models.SlugField(unique=True)
image = models.ImageField(upload_to="products/%Y/%m/%d", blank=True, null=True)
def __str__(self):
return self.produto_nome
def get_absolute_url(self):
return reverse('produto:produto_detail', kwargs={'slug': self.slug})
class Ordem(models.Model):
user = models.ForeignKey(CustomUser, on_delete=models.SET_NULL, blank=True, null=True)
data_pedido = models.DateTimeField(auto_now_add=True, null=True, blank=True)
enviado = models.BooleanField(default=False, null=True, blank=True)
transaction_id = models.CharField(max_length=200, null=True)
def __str__(self):
return str(self.id)
def get_total_preco(self):
total = 0
for pedido in self.produtos_itens.all():
total += pedido.get_total_item_preco()
return total
class OrdemItem(models.Model):
produto = models.ForeignKey(Produto, on_delete=models.SET_NULL, blank=True, null=True)
ordem = models.ForeignKey(Ordem, on_delete=models.SET_NULL, blank=True, null=True)
quantidade = models.IntegerField(default=0, null=True, blank=True)
data_add = models.DateTimeField(auto_now_add=True, null=True, blank=True)
def __str__(self):
return f'{self.quantidade} unidade de {self.produto.produto_nome}'
def get_total_item_preco(self):
return self.quantidade * self.produto.preco
Я добавил метод в моей модели 'Ordem' для возврата 'produto_nome'. А затем я вызвал в своем админе
models.py
class Ordem(models.Model):
user = models.ForeignKey(CustomUser, on_delete=models.SET_NULL, blank=True, null=True)
data_pedido = models.DateTimeField(auto_now_add=True, null=True, blank=True)
enviado = models.BooleanField(default=False, null=True, blank=True)
transaction_id = models.CharField(max_length=200, null=True)
def __str__(self):
return str(self.id)
def produtos(self):
return list(OrdemItem.objects.filter(ordem__id=self.id))
def get_total_preco(self):
total = 0
for pedido in self.produtos_itens.all():
total += pedido.get_total_item_preco()
return total
admin.py
class OrdemAdmin(admin.ModelAdmin):
list_display= ('id', 'enviado', 'produtos')
admin.site.register(Categoria)
admin.site.register(Produto, ProdutoAdmin)
admin.site.register(OrdemItem)
admin.site.register(Ordem, OrdemAdmin)