gpt4 book ai didi

django - 在绑定(bind)的 Django 管理表单中分配初始字段值

转载 作者:行者123 更新时间:2023-12-04 23:07:25 24 4
gpt4 key购买 nike

我有一个相当简单的 Django 应用程序(Red Hat 上的 v1.3),我使用管理应用程序来创建和修改数据库记录。我的基础模型中的一个字段是日期字段。每次在管理员的新表单或编辑表单中显示相应的字段时,我想要 初始 此字段的值是今天的日期(和时间)。如果她愿意,用户可以选择此后对其进行修改。
我知道我可以设置default我的模型定义中的字段值(即在 models.py 中)。首次创建数据库记录时效果很好。但是对于更改表单的后续调用,我分配给默​​认参数 ( datetime.datetime.now ) 的可调用对象显然不会被调用。
我已经很好地查看并尝试了 stackoverflow 中其他地方描述的所有许多提议的解决方案,但没有成功。其中大部分似乎都围绕着将初始化代码插入到 ModelForm 中。子类,例如要么是这样的......

class ConstantDefAdminForm(ModelForm) :
a_date_field = DateField(initial="datetime.datetime.now") # or now()
class Meta :
model = ConstantDef
widgets = {
...
}
或类似的东西......
class ConstantDefAdminForm(ModelForm) :
class Meta :
model = ConstantDef
widgets = {
...
}
def __init__(self, ...) :
# some initialisation of a_date_field
super(ConstantDefAdminForm, self).__init__(...)
但这些方法都不起作用。初始字段值始终设置为存储在数据库中的值。我对 Django 文档的阅读是,在表单中施加初始字段值的各种方法仅适用于 。未绑定(bind)表格,而不是 绑定(bind)形式。对?
但是这种能力(选择性地覆盖当前存储的值)似乎是一个如此受欢迎的要求,我相信必须有一种方法来做到这一点。
有没有人成功做到这一点?
提前致谢,
菲尔

最佳答案

这是一种可能有效的方法。在您的模型管理类中,更改 obj.a_date_field 的值在表单绑定(bind)之前。日期字段的“默认”值应该是新值。

class MyModelAdmin(ModelAdmin):
...
def get_object(self, request, object_id):
obj = super(MyModelAdmin, self).get_object(request, object_id)
if obj is not None:
obj.a_date_field = datetime.now()
return obj

请注意 get_object没有记录,所以这有点hacky。

关于django - 在绑定(bind)的 Django 管理表单中分配初始字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8477001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com