在django的admin后台数据列表中,有时候需要将model中的自定义方法取的值作为临时字段显示出来,具体怎么做呢?
比如:model中有商品model,其中用自定义方法get_com_recommend_star设置推荐星级显示为五星符号。要将此方法在admin后台的list_display中调用,并且显示为自定义的名称,需要设置get_com_recommend_star.short_description和get_com_recommend_star.allow_tags。
以下是代码:
1、model中的代码:
class Commodity(models.Model): STAR_CHOICE=( (0,'无星'), (1,'一星'), (2,'二星'), (3,'三星'), (4,'四星'), (5,'五星'), ) def image_upload_to(instance, filename): ext = filename.split('.')[-1] filename = '{}.{}'.format(instance.code, ext) return 'commImg/' + datetime.now().strftime('%Y%m') + '/' + filename code = models.CharField(max_length=100, verbose_name='商品编码') name = models.CharField(max_length=100, verbose_name='商品名称') star_level = models.SmallIntegerField(default=0, verbose_name='推荐星级',choices=STAR_CHOICE)
class Meta: verbose_name = '业务商品' verbose_name_plural = verbose_name def __str__(self): return self.name
def get_com_recommend_star(self): star_str = '' if self.star_level > 0: for i in range(0, self.star_level): star_str = star_str + '★' else: star_str = '〇' return star_str
get_com_recommend_star.short_description = '推荐星级' get_com_recommend_star.allow_tags = True
2、admin中的代码:
@admin.register(Commodity) class CommodityAdmin(admin.ModelAdmin): list_display = ('code', 'name', 'get_com_recommend_star')