Django filter_horizontal filtering

2019-04-01 13:35发布

问题:

I have 2 models related by M2M type of relationship. I use filter_horizontal in the admin for editing my entities.

However, I would like to have a control on what is presented in the left side of the filter_horizontal widget. For example, I would like to filter and show only those entities that match some certain criteria.

回答1:

I think I found it!

class MyModelAdmin(admin.ModelAdmin):
def formfield_for_manytomany(self, db_field, request, **kwargs):
    if db_field.name == "cars":
        kwargs["queryset"] = Car.objects.filter(owner=request.user)
    return super(MyModelAdmin, self).formfield_for_manytomany(db_field, request, **kwargs)

ModelAdmin.formfield_for_manytomany(db_field, request, **kwargs)



回答2:

This subject is always tricky in the Django admin. I suppose that in the inline defenition you can do something like this:

class BAdmin(admin.TabularInline): ...

def get_queryset(self, request):
    qs = super(BAdmin, self).get_queryset(request)
    return qs.filter(user=request.user)

https://docs.djangoproject.com/en/stable/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_queryset