2010-10-19 109 views

回答

132

使用Readonly Fields。像這樣(Django的> = 1.2):

class MyModelAdmin(admin.ModelAdmin): 
    readonly_fields=('first',) 
+3

+1。特別是如果你不打算在Admin中編輯該字段。 – 2010-10-19 16:05:43

12

更新

該解決方案是非常有用的。如果你想保持整個不可編輯字段,那麼@Till Backhaus'answer是更好的選擇。

原來的答案做這將是管理員使用自定義ModelForm

的一種方式。該表單可以覆蓋必填字段以使其可編輯。因此,您保留editable=False其他地方,但管理員。對於例如(用Django 1.2.3測試)

# models.py 
class FooModel(models.Model): 
    first = models.CharField(max_length = 255, editable = False) 
    second = models.CharField(max_length = 255) 

    def __unicode__(self): 
     return "{0} {1}".format(self.first, self.second) 

# admin.py 
class CustomFooForm(forms.ModelForm): 
    first = forms.CharField() 

    class Meta: 
     model = FooModel 
     fields = ('second',) 

class FooAdmin(admin.ModelAdmin): 
    form = CustomFooForm 

admin.site.register(FooModel, FooAdmin) 
+0

這是不行的,至少在Django的1.6在管理面板正確顯示的形式,但是當我保存的格式,並再次返回到它的形式值再次默認。 – Euphorbium 2014-10-07 12:42:50

相關問題