কার্ল মেয়ারের উত্তরটি প্রসারিত করতে চেয়েছিল, যা এই তারিখ পর্যন্ত পুরোপুরি কাজ করে।
আমি সর্বদা (বিকল্পের সাথে বা ছাড়াই) TextField
পরিবর্তে ব্যবহার করি CharField
এবং ডিবি স্তরের পরিবর্তে ইউআই / এপিআই পাশের অক্ষর সীমাবদ্ধতা আরোপ করি। এই কাজটি গতিশীল করার জন্য:
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
s এবং 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']
ভেবেছিলেন যে উত্তরগুলি খুঁজছেন অন্যেরা এটি দরকারী হতে পারেন।