कार्ल मेयर के जवाब पर विस्तार करना चाहता था, जो इस तिथि तक पूरी तरह से काम करता है।
मैं हमेशा (विकल्पों के साथ या बिना) TextFieldका उपयोग करता हूं CharFieldऔर DB स्तर पर यूआई / एपीआई की ओर से चरित्र सीमाएं लागू करता हूं । इस काम को गतिशील बनाने के लिए:
from django import forms
from django.contrib import admin
class BaseAdmin(admin.ModelAdmin):
"""
Base admin capable of forcing widget conversion
"""
def formfield_for_dbfield(self, db_field, **kwargs):
formfield = super(BaseAdmin, self).formfield_for_dbfield(
db_field, **kwargs)
display_as_charfield = getattr(self, 'display_as_charfield', [])
display_as_choicefield = getattr(self, 'display_as_choicefield', [])
if db_field.name in display_as_charfield:
formfield.widget = forms.TextInput(attrs=formfield.widget.attrs)
elif db_field.name in display_as_choicefield:
formfield.widget = forms.Select(choices=formfield.choices,
attrs=formfield.widget.attrs)
return formfield
मैं एक मॉडल का नाम है Postजहां title, slugऔर stateकर रहे हैं TextFieldऔर stateविकल्प नहीं है। व्यवस्थापक की परिभाषा इस प्रकार है:
@admin.register(Post)
class PostAdmin(BaseAdmin):
list_display = ('pk', 'title', 'author', 'org', 'state', 'created',)
search_fields = [
'title',
'author__username',
]
display_as_charfield = ['title', 'slug']
display_as_choicefield = ['state']
सोचा दूसरों को जवाब के लिए देख यह उपयोगी हो सकता है।