Django管理界面中的其他字段

时间:2010-11-29 20:15:33

标签: python django django-admin

假设我有一些未被模型字段备份的持久模型属性,我如何允许在管理界面中编辑此字段?

示例设置:

# models.py

# appropriate imports...

class MyModel(Model):
      # regular fields.
    foo = CharField(max_length=50)
    bar = BooleanField()
    # ...

      # custom property, backed by a file.
    def _get_meh ( self ):
        return ... # read from file
    def _set_meh ( self, value ):
        ... # write to file.
    meh = property(_get_meh, _set_meh)

meh的值实际存储在磁盘上的文件中,其路径取决于foo中的值。我希望能够从管理界面编辑meh的值。

# admin.py

# appropriate imports...

class MyModelAdmin(ModelAdmin):
    # what do I put here?

注意:如果有人需要询问,我正在使用Django 1.2.1版,但如果您的解决方案需要升级,则可以进行升级。在Python 2.5上运行的任何东西都可以,我现在无法真正升级。

2 个答案:

答案 0 :(得分:1)

Ny Django的知识并不是那么好,但是根据你想要的复杂程度,我不确定这样的事情是否可以在没有太多hackery的情况下轻松完成。

无论如何,如果你想将它添加到Add MyModel页面,你可以编辑相应的管理模板。

因此,在您的模板目录中,创建类似于:

的内容
admin/app_label/MyModel/change_form.html

然后扩展基本模板,并添加您自己的内容:

{% extends "admin/change_form.html" %}

{% block something_you_want_to_override %}
    <p>Your HTML goes here</p>
{% endblock %}

你真的没办法将这个自定义字段变成实际的Django字段吗?当然你可以覆盖模型上的save()方法并按这样做吗?或者使用pre_save信号?

干杯, 维克多

答案 1 :(得分:1)

看看这个: http://www.scribd.com/doc/68396387/Adding-extra-fields-to-a-model-form-in-Django%E2%80%99s-admin-%E2%80%93-Hindsight-Labs (这个离线,http://www.hindsightlabs.com/blog/2010/02/11/adding-extra-fields-to-a-model-form-in-djangos-admin/

基本上,您将从forms.ModelForm和

创建一个MyModelFrom子类。
  1. 将额外的meh字段添加到MyModelFrom定义。
  2. 覆盖MyModelFrom的构造函数,如果将模型实例传递给表单,则设置self.initial meh属性。
  3. 覆盖MyModelFrom的save方法,根据表单字段在模型实例上设置meh属性。
  4. 这样,meh属性可以在你的模型中正确填充,但是你还需要覆盖MyModel的save()方法来实际将这个值保存到你的磁盘文件中:

    (Google为“django模式覆盖保存”,sry,似乎我不能发布超过每个答案的链接,直到我获得超过10个代表...)

    干杯,