如何在另一个模型中显示模型信息?在Django



所以,我有三个模型,并且与外键相连。我正在使用" avaria"上的list_display,我想在模型" avaria"中显示" Pavimento"的名称。最好的选择是什么?

class pavimento(models.Model):
  pavimento_nome = models.CharField("Pavimento",max_length=200)
class avaria(models.Model):
  avaria_consumidores = models.IntegerField(blank=True,null=True,verbose_name="Consumidores")

class pavimentacao(models.Model):
  pavimentacao_id=models.ForeignKey(avaria,related_name='avariaObjects',on_delete=models.CASCADE)
  pavimentacao_avaria = models.ForeignKey(pavimento,on_delete=models.CASCADE, verbose_name="Pavimento")

您可以为avaria

编写属性
@property
def pavimento_names(self):
    pavimentacaos = self.avariaObjects.select_related('pavimentacao_avaria').values_list('pavimentacao_avaria__pavimento_nome', flat=True)
    return ', '.join(pavimentacaos)

并将'pavimento_names'添加到readonly_fieldslist_display avaria管理员列表

,也可以直接将方法添加到管理中,例如:

class AvariaAdmin(admin.ModelAdmin):
    list_display = (..., 'get_pavimento_names')
    def get_pavimento_names(self, obj):
        pavimentacaos = obj.avariaObjects.select_related('pavimentacao_avaria').values_list('pavimentacao_avaria__pavimento_nome', flat=True)
        return ', '.join(pavimentacaos)
    get_pavimento_names.short_description = 'Pavimento Names'
    get_pavimento_names.admin_order_field = 'avariaObjects__pavimentacao_avaria__pavimento_nome'

最新更新