2010-10-19 37 views

Trả lời

132

Sử dụng Readonly Fields. Giống như vậy (đối với django> = 1.2):

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

+1. Đặc biệt là nếu bạn _don't_ có kế hoạch chỉnh sửa tất cả các trường trong Admin. –

12

Cập nhật

Giải pháp này rất hữu ích nếu bạn muốn giữ lại lĩnh vực này có thể chỉnh sửa trong Admin nhưng không thể chỉnh sửa những nơi khác. Nếu bạn muốn giữ cho trường không thể chỉnh sửa trong suốt thì @Till Backhaus 'answer là tùy chọn tốt hơn.

gốc trả lời

Một cách để làm điều này là sử dụng một tùy chỉnh ModelForm trong admin. Biểu mẫu này có thể ghi đè trường bắt buộc để có thể chỉnh sửa. Qua đó, bạn giữ lại editable=False ở mọi nơi khác trừ Quản trị viên. Ví dụ: (thử nghiệm với 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

Điều này không hoạt động, ít nhất là trên django 1.6 Biểu mẫu được hiển thị chính xác trong bảng quản trị, nhưng khi tôi lưu biểu mẫu và quay lại lại, biểu mẫu giá trị là mặc định một lần nữa. – Euphorbium

Các vấn đề liên quan