请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

admin表单字段指定初始值

老师你好,我用的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表单显示的时候,其中一个字段在表单上显示的值,是通过其它字段计算来的,这个我应该怎么实现呢

正在回答 回答被采纳积分+3

2回答

慕数据5323124 2020-12-23 20:55:33

童鞋在不?请教一个问题,在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 回复 有任何疑惑可以回复我~
  • bobby #1
    这个问题你可以在函数中打个断点 看看现实的时候是否能进入断点就知道是否有执行到了
    回复 有任何疑惑可以回复我~ 2020-12-24 13:06:17
bobby 2020-09-08 15:46:45

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

0 回复 有任何疑惑可以回复我~
  • 提问者 桂圆 #1
    定义函数统计,但是我用的admin的后台,没用xadmin不知道怎么把这个统计出来的值,赋给admin生成的那个表单,但是在后台的表单里怎么调用模型里的这个函数呢?
    我现在是重写的save_model()
    class Trading_recordAdmin(admin.ModelAdmin):
        def save_model(self, request, obj, form, change):
            today = datetime.date.today()
            a = obj.r_time
            b = today - a
            if b.days>0 and obj.state=="1":
                obj.r_amount=(obj.amount)*(1+b.days*3)
            else:
                obj.r_amount=0
            super().save_model(request, obj, form, change)
    我想要admin表单打开,计算的值是根据字段的日期变化的,重写save_model是我点保存后,这个值才能计算。
    回复 有任何疑惑可以回复我~ 2020-09-08 17:36:45
  • 提问者 桂圆 #2
    在model里定义函数,然后把字段的default值设置为这个函数,能实现每次打开django的admin后台对应页面,这个值动态变化吗
    回复 有任何疑惑可以回复我~ 2020-09-09 02:10:57
  • bobby 回复 提问者 桂圆 #3
    不是的,你在显示列表页的时候将这个函数配置成一个列 就会自动调用函数
    回复 有任何疑惑可以回复我~ 2020-09-09 22:33:55
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信