Câu trả lời:
Sử dụng Trường chỉ đọc . Như vậy (đối với django> = 1.2):
class MyModelAdmin(admin.ModelAdmin):
readonly_fields=('first',)
fields
, nhưng khi tôi thêm nó vào readonly_fields
thì nó không hiển thị cho đến khi tôi thêm nó vào cả hai và sau đó nó xuất hiện trong admin.
Cập nhật
Giải pháp này hữu ích nếu bạn muốn giữ trường có thể chỉnh sửa trong Quản trị nhưng không thể chỉnh sửa ở mọi nơi khác. Nếu bạn muốn giữ trường không thể chỉnh sửa trong suốt thì câu trả lời của @Till Backhaus là lựa chọn tốt hơn.
Câu trả lời gốc
Một cách để làm điều này là sử dụng một tùy chỉnh ModelForm
trong quản trị viên. Biểu mẫu này có thể ghi đè trường bắt buộc để có thể chỉnh sửa được. Qua đó bạn giữ lại editable=False
mọi nơi khác ngoài Admin. 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)