By default Django admin site shows all records of a related model/table for viewing. How can I show only the records that meet certain criteria?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
In your admin definition, you can define a queryset()
method that returns the queryset for that model's admin. eg:
class MyModelAdmin(admin.ModelAdmin):
def queryset(self, request):
qs = super(MyModelAdmin, self).queryset(request)
return qs.filter(user=request.user)
Then only objects with user=request.user
will be visible in the admin.
回答2:
I know this has an "accepted answer", but I just wanted to throw this out there since I came across this answer while pursuing something else and realized I had an alternative solution that I found and use often that gives me more granular level control than the accepted answer.
class TestAdmin(admin.ModelAdmin):
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "FIELD":
kwargs["queryset"] = TestModel.objects.filter(test=False)
return super(TestAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
def formfield_for_manytomany(self, db_field, request, **kwargs):
if db_field.name == "FIELDS":
kwargs["queryset"] = TestModel.objects.filter(test=False)
return super(TestAdmin, self).formfield_for_manytomany(db_field, request, **kwargs)