如何为只读字段

时间:2015-09-26 11:59:40

标签: django-1.6

我有一个django应用程序,它使用django.contrib.admin进行管理任务。

对于一个模型,我现在需要添加一个字段,该字段指示每行创建的代码部分。我正在使用readonly_fields来阻止通过管理界面更改此值。

此字段中的默认值将告诉我该行是

  • 在引入字段之前创建
  • 由尚未更新以设置字段的代码创建
  • 通过管理界面创建

但我需要更好的粒度。特别是我希望能够区分由不了解该字段的代码创建的行和通过管理界面创建的行。

我的ModelAdmin类是否可以为readonly_fields中提到的字段指定初始值?

2 个答案:

答案 0 :(得分:1)

一种方法是,

def get_form(self, request, caja=None, **kwargs):
    self.form = YourModelForm

    form = super(YourModelAdmin, self).get_form(request, caja, **kwargs)
    form.base_fields['field'].initial = your_initial_data
    return form

答案 1 :(得分:0)

我找到了这个解决方案,似乎有效:

class Admin(ModelAdmin):
    readonly_fields = ('created_by',)
    def save_form(self, request, form, change):
        r = super(Admin, self).save_form(request, form, change)
        if not change:
            assert r.created_by == CREATED_BY_UNKNOWN
            r.created_by = CREATED_BY_ADMIN
        return r

CREATED_BY_UNKNOWNCREATED_BY_ADMIN是我的代码中其他位置定义的值。