在Django Admin中过滤下拉列表值,可以通过以下几种方法实现:
ModelAdmin
中的formfield_for_choice_field
方法自定义下拉列表值。from django import forms
from django.contrib import admin
from .models import MyModel
class MyModelAdmin(admin.ModelAdmin):
def formfield_for_choice_field(self, db_field, request, **kwargs):
if db_field.name == 'my_choice_field':
kwargs['choices'] = MyModel.MY_CHOICES.filter(some_filter=True)
return super().formfield_for_choice_field(db_field, request, **kwargs)
admin.site.register(MyModel, MyModelAdmin)
ModelAdmin
中的get_field_queryset
方法自定义下拉列表值。from django.contrib import admin
from .models import MyModel
class MyModelAdmin(admin.ModelAdmin):
def get_field_queryset(self, db, db_field, request):
if db_field.name == 'my_choice_field':
return MyModel.objects.filter(some_filter=True)
return super().get_field_queryset(db, db_field, request)
admin.site.register(MyModel, MyModelAdmin)
ModelForm
中的__init__
方法自定义下拉列表值。from django import forms
from .models import MyModel
class MyModelForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['my_choice_field'].queryset = MyModel.objects.filter(some_filter=True)
class Meta:
model = MyModel
fields = '__all__'
class MyModelAdmin(admin.ModelAdmin):
form = MyModelForm
admin.site.register(MyModel, MyModelAdmin)
以上方法可以实现在Django Admin中过滤下拉列表值,从而提高数据的可读性和可维护性。
领取专属 10元无门槛券
手把手带您无忧上云