แม้ว่าจะมีการระบุช่อง'editable=False'
ในแบบจำลอง แต่ฉันต้องการให้หน้าผู้ดูแลระบบแสดง ปัจจุบันมันซ่อนสนามทั้งหมด .. มันจะสำเร็จได้อย่างไร?
แม้ว่าจะมีการระบุช่อง'editable=False'
ในแบบจำลอง แต่ฉันต้องการให้หน้าผู้ดูแลระบบแสดง ปัจจุบันมันซ่อนสนามทั้งหมด .. มันจะสำเร็จได้อย่างไร?
คำตอบ:
fields
แต่เมื่อฉันเพิ่มลงในreadonly_fields
นั้นไม่ปรากฏจนกว่าฉันจะเพิ่มลงในทั้งสองอย่างจากนั้นก็ปรากฏในผู้ดูแล
อัปเดต
โซลูชันนี้มีประโยชน์หากคุณต้องการให้ฟิลด์สามารถแก้ไขได้ใน Admin แต่ไม่สามารถแก้ไขได้ทุกที่ หากคุณต้องการให้ฟิลด์ไม่สามารถแก้ไขได้ตลอดไปคำตอบของ @Till Backhaus คือตัวเลือกที่ดีกว่า
คำตอบเดิม
วิธีหนึ่งในการทำเช่นนี้คือใช้กำหนดเอง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)
ฟิลด์แบบอ่านอย่างเดียวของคุณต้องอยู่ในฟิลด์ด้วย:
fields = ['title', 'author', 'content', 'published_date', 'updated_date', 'created_date']
readonly_fields = ('published_date', 'updated_date', 'created_date')
readonly_fields
ด้านบนและปล่อยให้fields
เป็นช่องที่แก้ไขได้+ readonly_fields
(ทั้งสองเป็น tuples ในรหัสของฉันฉันไม่เห็นว่าทำไมจึงประกาศเป็นรายการ)