![](/img/trans.png)
[英]How can I dynamically add local variables to dynamically created Python class methods
[英]How to add methods to the dynamically created classes in python?
from django.contrib import admin
from .filters import DropdownFilter
from django.db.models import Q
from django.utils.translation import gettext_lazy as _
from .models import User
def queryset(self, request, queryset):
term = self.value()
if term is None:
return
term = term.lower
username = Q()
for bit in term.spilt():
username = Q(username, queryset)
return queryset.filter(username)
class InputFilter(admin.filters.SimpleListFilter):
template = 'admin/input_filter.html'
def lookups(self, request, model_admin):
# Dummy, required to show the filter.
return ((),)
def choices(self, changelist):
# Grab only the "all" option.
all_choice = next(super().choices(changelist))
all_choice['query_parts'] = ((k, v)for k, v in changelist.get_filters_params().items() if k != self.parameter_name)
yield all_choice
class TransactionAdmin(admin.ModelAdmin):
list_display = [field.name for field in User._meta.fields]
c = type('UserFilter',(InputFilter,),{'title' : _('title'),'parameter_name' : 'search', 'query': queryset})
c.queryset = queryset
list_filter = [type('UserFilter',(InputFilter,),{'title' : _(i),'parameter_name' : i, 'query': queryset}) for i in list_display]
admin.site.register(User, TransactionAdmin)
代碼是關於為 django 管理站點創建自定義文本輸入過濾器的全部內容,在這里我想將每個字段名稱傳遞給標題,並將查詢集函數添加到動態創建的類中,但似乎它不起作用並且出現錯誤像下面
NotImplementedError at /admin/epic/user/
subclasses of ListFilter must provide a queryset() method
如何解決這個問題呢?
你應該用大括號調用函數,比如 queryset()。
list_filter = [type('UserFilter',(InputFilter,),{'title' : _(i),'parameter_name' : i, 'queryset': queryset}) for i in list_display]
它現在正在工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.