2016-10-03 4 views
1

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

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

ответ

0

Этот вопрос всегда сложный в администраторе 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

+0

Thx! Я думаю, что он поймает модель, которую вы редактируете, но не «дети», предварительно заполненные в левом поле «filter_horizontal», –

3

Я думаю, что я нашел!

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)

Смежные вопросы