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

标签 django django-admin

我有一个相当简单的 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/

相关文章:

django - 如何为我的 Django 项目正确设置 DJANGO_SETTINGS_MODULE(我使用的是 virtualenv)?

Django 过滤器 __date 时区感知

Django Celery 接收和接受任务,但不执行它们

regex - 调整 Django URL 中的正则表达式以匹配文件路径

Django 重定向并带有自定义错误消息

Django Admin +水平过滤器?

django - 新版本的 sorl-thumbnail ,如何在 django admin 中显示拇指?

Django OAuth2 unsupported_grant_type

python - OSError at/admin/pages/richtextpage/3/[Errno 13] Permission denied : '/static'

Django 管理员 : How to display a field that is marked as editable=False' in the model?