我使用的是django1.9。在
我有一些模型:
class MyOtherModel:
my_other_prop = models.IntergerField()
class MyModel:
some_prop = models.IntegerField()
my_other_model = models.ForeignKey(MyOtherModel)
我的管理模式是:
^{pr2}$现在默认情况下,这将使我能够在表单上设置my_other_model
,创建my_other_model
并更新my_other_model
。我要做的是禁用编辑(更新)my_other_model
。我仍然希望能够设置它,并且仍然希望能够从MyModelAdmin
创建一个。由于MyOtherModel
不通过admin在任何其他地方公开,所以从管理部分的角度来看,模型是不可变的。在
我在Django文档上翻了一番,也在google上搜索了不少,但没有找到一种方法来实现这一点。我不希望字段是只读的,因为我希望能够创建它们。如果这个对象存在,我不想重写get_readonly_fields()
返回false,因为我仍然希望能够更改MyOtherModel
MyModel
拥有的。。只是不要编辑MyOtherModel
本身。在
有人能给我指出正确的方向吗?我应该用不同的方法吗?如有任何建议,将不胜感激,谢谢!在
您可以重写admin类中的
get_form()
方法,以便在“编辑和创建”页面中使用其他表单:前面的代码片段将使用自定义的
ReadOnlyPkForm
表单,当您试图编辑实例时,该表单将排除该字段。当您尝试创建一个新实例时,将使用不排除的标准表单(即所有模型字段)。如果希望字段显示为只读(我刚刚使用了ReadOnlyPkForm
使示例更容易),可以通过init进一步调整ReadOnlyPkForm
。在注意管理类还有
change_view()
和add_view()
方法,您也可以使用它们来覆盖编辑/创建页面中的表单,但根据我的经验,它们用于更复杂的修改(例如underyling模板),更不用说这两个方法由于缓存问题可能会有奇怪的行为。在如果我没弄错你的问题,这个行吗?在
Disable link to edit object in django's admin (display list only)?
相关问题 更多 >
编程相关推荐