применение декораторов к formfield_for_foreignkey в админке django - PullRequest
0 голосов
/ 03 мая 2019

У меня есть несколько моделей, использующих раскрывающийся список внешних ключей, я хочу настроить раскрывающийся список внешних ключей в соответствии с условием. Я пытался использовать декораторы, но раскрывающиеся списки в форме добавления администратора

from .decorators import admin_active_country
.
.
.
@admin_active_country
def formfield_for_foreignkey(self, db_field, request, **kwargs):
    return super().formfield_for_foreignkey(db_field, request, **kwargs)

Я создал декораторы для достижения ниже

        if db_field.name == "country":
            kwargs["queryset"] = Country.objects.filter(is_active=True)

вот декораторы, но при использовании декораторов я не вижу выпадающего меню на странице администратора, оно исчезает

def admin_active_country(func):
    print(func,"function priniting")
    @functools.wraps(func)
    def wraps(*args,**kwargs):
         # ags[1] is db_field 
        if args[1].name == "country":

            kwargs["queryset"] =  Country.objects.filter(is_active=True)
        return func(*args,**kwargs)

    return wraps

Приведенный ниже код работает нормально. Я хочу добиться того же, используя декораторы, чтобы я мог применить его к нескольким администраторам, следуя DRY

    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "country":
            kwargs["queryset"] = Country.objects.filter(is_active=True)
        return super().formfield_for_foreignkey(db_field, request, **kwargs)

Пожалуйста, помогите мне, спасибо заранее

...