简体   繁体   English

如何在管理员中显示 FK 字段? DJANGO

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM