【发布时间】:2014-06-03 09:25:35
【问题描述】:
我正在做我的第一个 Django 项目,我需要了解反射在 django 中的使用方式。
- 我有方法
category_autocomplete与jQuery 一起使用来获取类别字段的自动完成。 - 我需要在更多的地方自动完成,但在不同的事情上。我认为将其制成一个类以供重用可能是个好主意。
- 我已经开始上课,但我不知道如何继续。
问题在于 django 使用 filter 函数的方式。它有一个类似于<param-name>_icontains 的参数。我可以通过使用 getattr 并将参数名称作为字符串传递来轻松重现 lambda,但我不知道如何使用反射来获取 filter 函数的参数名称。
知道如何做到这一点吗?
class Autocomplete():
@staticmethod
def get_json_autocomplete(self, cur_objects, func):
results = []
for cur_object in cur_objects:
results.append(func(cur_object))
return json.dumps(results)
@staticmethod
def autocomplete(self, request, class_name, attr_name):
term = request.GET.get('term', '')
data = Autocomplete.get_json_autocomplete(
#Problem here
class_name.objects.filter(attr_name=term),
lambda x: getattr(x, attr_name)
)
return HttpResponse(data, 'application/json')
def _get_json_autocomplete(cur_objects, func):
results = []
for cur_object in cur_objects:
results.append(func(cur_object))
return json.dumps(results)
def category_autocomplete(request):
term = request.GET.get('term', '')
data = _get_json_autocomplete(
Category.objects.filter(name__icontains=term),
lambda x: x.name
)
return HttpResponse(data, 'application/json')
【问题讨论】:
标签: python django python-3.x reflection refactoring