Фильтр Django filter_horizontal

61
6

У меня есть 2 модели, связанные с типом отношения M2M. Я использую filter_horizontal в admin для редактирования моих объектов.


Однако я хотел бы иметь контроль над тем, что представлено в левой части виджета filter_horizontal. Например, я хотел бы фильтровать и показывать только те объекты, которые соответствуют некоторым определенным критериям.

спросил(а) 2021-01-19T20:45:57+03:00 2 месяца, 3 недели назад
1
Решение
87

Думаю, я нашел его!


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)

ответил(а) 2021-01-19T20:45:57+03:00 2 месяца, 3 недели назад
43

Этот вопрос всегда сложный в администраторе Django. Я полагаю, что в встроенном defenition вы можете сделать что-то вроде этого:


класс 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

ответил(а) 2021-01-19T20:45:57+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема