[英]How to show FK fields in admin? DJANGO
I'm developing an e-commerce site and I'm trying to show in my ADMIN the 'produto_nome' related in my 'Ordem' table.我正在开发一个电子商务网站,并试图在我的 ADMIN 中显示与我的“Ordem”表相关的“produto_nome”。 For now, in my admin, in the 'Ordem' table, it's just showing the id of each object.
目前,在我的管理员中,在“Ordem”表中,它只显示每个 object 的 ID。 Is it possible to show field 'produto_nome' in that 'Ordem' table?
是否可以在“Ordem”表中显示字段“produto_nome”?
Below is my models下面是我的模型
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
I added a method in my models 'Ordem' to return the 'produto_nome'.我在我的模型“Ordem”中添加了一个方法来返回“produto_nome”。 And then I called in my admin
然后我打电话给我的管理员
models.py模型.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管理员.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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.