假设我有一些未被模型字段备份的持久模型属性,我如何允许在管理界面中编辑此字段?
示例设置:
# 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上运行的任何东西都可以,我现在无法真正升级。
答案 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子类。这样,meh属性可以在你的模型中正确填充,但是你还需要覆盖MyModel的save()方法来实际将这个值保存到你的磁盘文件中:
(Google为“django模式覆盖保存”,sry,似乎我不能发布超过每个答案的链接,直到我获得超过10个代表...)
干杯,