【Django】在admin后台显示数据库中没有的用户自定义字段

【Django】在admin后台显示数据库中没有的用户自定义字段

有两个model,一个是资产信息Asset

class Asset(BaseModel):
    """资产信息model"""
    type = models.ForeignKey(AssetType, on_delete=models.CASCADE, verbose_name="资产类型")
    name = models.CharField(verbose_name="资产名称", max_length=50)
    numbers = models.IntegerField(verbose_name="资产数量", default=0)
    storage_time = models.DateTimeField(verbose_name="入库时间")
    serial_number = models.CharField(verbose_name="资产序列号", max_length=50, null=True, blank=True)
    state = models.CharField(verbose_name="资产状态", choices=ASSET_STATE, max_length=2)
    position = models.CharField(verbose_name="资产位置", max_length=200)

另一个是资产使用信息UsageRecord

class UsageRecord(BaseModel):
    """资产使用记录model"""
    asset = models.ForeignKey(Asset, on_delete=models.CASCADE, verbose_name="资产名称")
    use_type = models.CharField(verbose_name="使用类型", max_length=4, choices=USE_TYPE)
    unit = models.ForeignKey(Unit, verbose_name="使用单位", on_delete=models.CASCADE)
    person = models.CharField(verbose_name="责任人", max_length=20, default="")
    mobile = models.CharField(verbose_name="责任人联系方式", max_length=11)
    leave_time = models.DateTimeField(verbose_name="出库时间", null=True, blank=True)
    position = models.CharField(verbose_name="资产位置", max_length=200)
    return_time = models.DateTimeField(verbose_name="归还时间", null=True, blank=True)
    check_up = models.CharField(verbose_name="检查情况", max_length=200, null=True, blank=True)
    remark = models.CharField(verbose_name="备注", max_length=200, null=True, blank=True)

在admin中,需要在资产信息Asset的列表中显示资产使用信息UsageRecord的信息,因为外键是定义在UsageRecord中的,在Asset中显示使用记录需要在admin类中自定义,代码如下:

@admin.register(Asset)
class AssetAdmin(admin.ModelAdmin):
    list_display = ('type', 'name', 'numbers', 'storage_time', 'serial_number', 'state', 'position', 'records')
    list_editable = ('state',)
    search_fields = ('serial_number',)

    def records(self, instance):
        """
        自定义records字段,显示资产的使用记录。
        instance参数,可以看成是Asset对象本身。
        如果有使用记录,返回第一个记录,如果没有使用记录,返回一个空列表。

        records.short_description 定义在admin中显示的列名称,相当于是model中的verbose_name
        """
        usage_record = UsageRecord.objects.filter(asset=instance.id).order_by('-add_time')
        if usage_record:
            return usage_record[0]
        else:
            return []

    records.short_description = "使用记录"

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值