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

时间:2018-12-21 09:43:31

标签: django

因此,我有3个模型,并且与外键相连。 我在“ 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")

1 个答案:

答案 0 :(得分:0)

您可以为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_fields管理员的list_displayavaria列表中。

或者您可以直接将方法添加到管理员中,例如:

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'