在admin中,可以自定义form来覆写控件。 下面举例用select替换charfield,用自定义控件替换textarea:
from django import forms
class BlogAdminForm(forms.ModelForm):
cate = models.Category.objects.all()
cate_choices = []
for item in cate:
cate_choices.append((item.title, item.title))
category = forms.ChoiceField(choices=cate_choices)
class Meta:
model = models.BlogPost
fields = '__all__'
widgets = {
'body': AdminMarkdownWidget
}
class BlogPostAdmin(admin.ModelAdmin):
list_display = ('title', 'timestamp')
readonly_fields = ('guid',)
form = BlogAdminForm
def save_model(self, request, obj, form, change):
obj.body = request.POST["body"]
return super(BlogPostAdmin, self).save_model(request, obj, form, change)