Здравствуйте коллеги. Выложу все-таки сюда, уж коли ветка посвящена обсуждению данного рецепта. Итак. Изменения коснулись файлов views.py и widgets.py.
views.py
import locale
from django.apps import apps
from django.http import HttpResponse
import json
def filterchain_all(request, app_name, model_name, method_name, pk):
Model = apps.get_model(app_name, model_name)
obj = Model.objects.get(pk=pk)
qs = getattr(obj, method_name)()
results = list(qs)
final = []
for item in results:
final.append({'value': item.pk, 'display': unicode(item)})
result = json.dumps(final)
return HttpResponse(result, content_type='application/json')
Что изменилось:
- Функция
get_model
изначально импортируемая автором как from django.db.models import get_model
в версии Django 1.7 "переехала" в apps
и теперь импорт выглядит как from django.apps import apps
. Собственно обращение к функции выглядит в измененном варианте следующим образом: Model = apps.get_model(app_name, model_name)
.
- JSON импортировался в авторской версии как
from django.utils import simplejson
. Однако simplejson
, начиная с версии Django 1.5 объявлен deprecated. Изменено на import json
.
- В авторской версии HttpResponse принимал параметр
mimetype='application/json'
, что по-видимому также объявлено
deprecated, т.к. в Django 1.7 вызывало исключение. Изменено на content_type='application/json
.
Далее widgets.py.
Изменения коснулись только функции render
. Привожу ее текст полностью:
def render(self, name, value, attrs=None):
attrs = dict(self.datas, **{'class': 'chained', 'id': 'id_%s' % name})
output = super(ChainedSelectWidget, self).render(name, value, attrs)
return mark_safe(output)
Отличие от авторской версии заключается в наличии дополнительного атрибута 'id': 'id_%s' % name
, что позволяет зависимому селекту одновременно являться родительским по отношению к следующему (в моем случае третьему) зависимому селекту.
Представленные изменения позволили расширить функционал великолепного авторского решения django-chained-selects
, а также позволяют использовать указанное решение с версией Django 1.7.
С Уважением.
Обновлено 12 Янв. 2015, 23:45 d0c3n7.