admin表单字段指定初始值

来源:13-4 自定义列表返回数据,同一个model注册两个管理器

桂圆

2020-09-07

老师你好,我用的django3.1,我想后台的admin在打开一个表单的时候,赋给一个计算来的初始值
网上查到可以在admin.py文件中,使用
formfield_for_dbfield来实现

class Trading_recordAdmin(admin.ModelAdmin):
    def formfield_for_dbfield(self, db_field, request, **kwargs):
        # field = super(Trading_recordAdmin,self).formfield_for_dbfield(db_field, request, **kwargs)
        if db_field.name == "r_amount":
            self.formfield_overrides[r_amount] = 11
        return super(Trading_recordAdmin,self).formfield_for_dbfield(db_field, request, **kwargs)
    '''设置列表可显示的字段'''
    list_display = ('release_time', 'addtime',  'amount', 'category',)

追踪到formfield_for_dbfield里看到源码中说使用formfield_overrides重写字段值,不知道理解的对不对

# If we've got overrides for the formfield defined, use 'em. **kwargs
        # passed to formfield_for_dbfield override the defaults.
        for klass in db_field.__class__.mro():
            if klass in self.formfield_overrides:
                kwargs = {**copy.deepcopy(self.formfield_overrides[klass]), **kwargs}
                return db_field.formfield(**kwargs)

我想要一个模型,在admin表单显示的时候,其中一个字段在表单上显示的值,是通过其它字段计算来的,这个我应该怎么实现呢

写回答

2回答

慕数据5323124

2020-12-23

童鞋在不?请教一个问题,在Iist_display添加自定义字段并将该配置注册、运行项目后,为啥在xadmin列表页都显示出了该字段、却没有值全是空的呢?下面aaa()、bbb()、paper_list都是自定义字段

class ProdAdmin(object):
    model_icon = "fa fa-crop"
    list_display = ['name','category','aaa','bbb','paper_list','image','image_data','create_time']
    list_filter = ['category']
    
    def aaa(self,obj):
        # return ', '.join([paper.title for paper in self.cropspaper.all()])
        print("*" * 50)
        print(obj.cropspaper.id)
        return obj.cropspaper.id
        
    def bbb(self):
        return 111

终端也没有打印值,怀疑是自定义字段函数没有执行,这个是为什么呢,用的是django3.1.3 xadmin2.0.1


0
1
bobby
这个问题你可以在函数中打个断点 看看现实的时候是否能进入断点就知道是否有执行到了
2020-12-24
共1条回复

bobby

2020-09-08

你直接在model中定义函数来统计不行吗 ?

0
3
bobby
回复
桂圆
不是的,你在显示列表页的时候将这个函数配置成一个列 就会自动调用函数
2020-09-09
共3条回复

Python3.6+django+xadmin,打造在线教育平台

【毕设】Python 2.7到3.6 完美适配,Django升级2.0

3677 学习 · 4038 问题

查看课程