Я использую django-selectable (https://bitbucket.org/mlavin/django-selectable) с администратором tabularInline, чтобы получить функцию автозаполнения в одном из встроенных полей.Это работает для встроенных строк, добавленных во время создания.У меня проблема в том, что функция автозаполнения не добавляется, когда пользователь добавляет еще одну строку в строку.
Здесь есть ошибка и исправление для этой проблемы
https://bitbucket.org/mlavin/django-selectable/issue/12/make-it-work-with-dynamically-added-forms И, глядя внизу на jquery.dj.selectable.js:
if (typeof(django) != "undefined" && typeof(django.jQuery) != "undefined") {
if (django.jQuery.fn.formset) {
var oldformset = django.jQuery.fn.formset;
django.jQuery.fn.formset = function(opts) {
var options = $.extend({}, opts);
var addedevent = function(row) {
bindSelectables($(row));
};
var added = null;
if (options.added) {
var oldadded = options.added;
added = function(row) { oldadded(row); addedevent(row); };
}
options.added = added || addedevent;
return oldformset.call(this, options);
};
}
}
Похоже, это должно заставить автозаполнение работать с динамически добавляемыми строками, но я не могу понять, что нужно сделать, чтобы это работало.Администратор tabularInline.html имеет inline_admin_formset, поэтому я должен проверять это, а не django.jQuery.fn.formset, как в коде выше?Или как-то добавить inline_admin_formset в django.jQuery.fn?
Большое спасибо за любые предложения.
Я использую версию 0.2.В forms.py есть встроенная форма:
class GrammarInlineForm(forms.ModelForm):
class Meta:
model = Grammar
widgets = {
'description' :forms.Textarea(attrs={'cols': 80, 'rows': 10, 'class': 'grammarInline'}),
'title' : selectable.AutoCompleteSelectWidget(lookup_class=GrammarLookup, allow_new=True),
}
exclude = ('creation_date', 'creator', 'plan')
def __init__(self, *args, **kwargs):
super(GrammarInlineForm, self).__init__(*args, **kwargs)
В admin.py встроенный администратор создается и добавляется к основному администратору (PlanAdmin):
class GrammarInline(admin.TabularInline):
form = GrammarInlineForm
model = Grammar
extra = 2
def save_formset(self, request,form, formset, change):
instances = formset.save(commit=False)
for instance in instances:
instance.creator = request.user
instance.save()
formset.save_m2m()
class PlanAdmin(admin.ModelAdmin):
form = PlanForm
list_display = ('title', 'topic', 'level', 'description','public', )
inlines = [ ActivityInline, GrammarInline, ]
После прочтения вашегоticket http://code.djangoproject.com/ticket/15760 Я пытался связать событие inline formsetadd, как это
django.jQuery('.ui-autocomplete-input').live('formsetadd', function(e, row) {
console.log('Formset add!');
console.log($(row));
});
, но, глядя на django / contrib / admin / media / js / inlines.js, кажется, что эти триггеры не 'т в версии 1.3.1 Джанго.Нужно ли привязываться к событию, которое запускается при добавлении inline?Здесь есть похожий случай https://bitbucket.org/mlavin/django-selectable/issue/31/dynamically-added-forms, но он использует плагин formset.Есть ли способ использовать bindSelectable (row) для inline администратора?