कार्ल मेयर के जवाब पर विस्तार करना चाहता था, जो इस तिथि तक पूरी तरह से काम करता है।
मैं हमेशा (विकल्पों के साथ या बिना) 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']
सोचा दूसरों को जवाब के लिए देख यह उपयोगी हो सकता है।