擅长:python、mysql、java
<p>您可以重写admin类中的<code>get_form()</code>方法,以便在“编辑和创建”页面中使用其他表单:</p>
<pre><code>class ReadOnlyPkForm(ModelForm):
class Meta:
model = MyModel
exclude = ('myothermodel',)
class MyModelAdmin(ModelAdmin):
def get_form(self, request, obj=None, **kwargs):
if obj: # Object intstance, so we're in edit page
# Override form, to use custom form
kwargs['form'] = ReadOnlyPkForm
return super(MyModelAdmin, self).get_form(request, obj, **kwargs)
</code></pre>
<p>前面的代码片段将使用自定义的<code>ReadOnlyPkForm</code>表单,当您试图编辑实例时,该表单将排除该字段。当您尝试创建一个新实例时,将使用不排除的标准表单(即所有模型字段)。如果希望字段显示为只读(我刚刚使用了<code>ReadOnlyPkForm</code>使示例更容易),可以通过<strong>init</strong>进一步调整<code>ReadOnlyPkForm</code>。在</p>
<p>注意管理类还有<code>change_view()</code>和<code>add_view()</code>方法,您也可以使用它们来覆盖编辑/创建页面中的表单,但根据我的经验,它们用于更复杂的修改(例如underyling模板),更不用说这两个方法由于缓存问题可能会有奇怪的行为。在</p>