Я отвечу на Где я могу разместить свои представления Admin / ModelForm Ajax? часть вашего вопроса, для части галереи, возможно, посмотрите на фотолог .
Что касается создания представлений, которые вызываются из форм администратора, я обнаружил, что создание простых пользовательских представлений является самым простым. В своем коде Javascript вы просто вызываете {% url my_ajax_view %}
с данными, относящимися к вашему приложению.
Например (модифицированная версия поиска иностранных ключей ajaxy):
class ForeignKeySearchInput(forms.HiddenInput):
"""
A Widget for displaying ForeignKeys in an autocomplete search input
instead in a ``select`` box.
"""
[ ... stuff removed ... ]
def render(self, name, value, attrs=None):
[ ... snip ... ]
context = Context({
'search_url': reverse('tools_autocomplete_search'),
'model_name': self.rel.to._meta.module_name,
'app_label': self.rel.to._meta.app_label,
[ ... snip ... ]
})
template = loader.get_template('admin/widgets/foreignkeysearchinput.html')
return rendered + mark_safe(template.render(context))
Ключевым моментом здесь является передача необходимых данных в шаблон виджета, который затем использует эти данные для правильного вызова обратного вызова ajax.
Тогда фактическое представление так же просто (или сложно), как и ваша проблема.
def ajax_search(request):
"""
Searches in the fields of the given related model and returns the
result as a simple string to be used by the jQuery Autocomplete plugin
"""
query = request.GET.get('q', None)
app_label = request.GET.get('app_label', None)
model_name = request.GET.get('model_name', None)
search_fields = request.GET.get('search_fields', None)
[ ... snip ... ]
return HttpResponse(simplejson.dumps(data, indent=2))
В качестве альтернативы вы можете встроить ajax-представление в подкласс ModelAdmin (или Mixin), но если вы не хотите разбираться с внутренними элементами django.contrib.admin
, маршрутизация вышеописанного способа намного проще.