2011-09-01 2 views
1

과 함께 django-selectable (https://bitbucket.org/mlavin/django-selectable)과 admin 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); 
     }; 
    } 
} 

그것은 자동 완성 작업을해야 다음과 같습니다 동적으로 추가 된 행이 있지만이 작업을 수행하기 위해 수행 할 작업을 수행 할 수 없습니다. admin tabularInline.html은 inline_admin_formset을 가지고 있으므로 위의 코드에서와 같이 django.jQuery.fn.formset이 아닌 체크해야합니다. 아니면 어떻게 든 django.jQuery.fn에 inline_admin_formset을 추가 하시겠습니까?

대단히 감사합니다.


저는 0.2 버전을 사용하고 있습니다.

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)에 추가됩니다 : http://code.djangoproject.com/ticket/15760 I 티켓 읽은 후

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, ] 

forms.py에서 는 인라인 형태가 그것을이

django.jQuery('.ui-autocomplete-input').live('formsetadd', function(e, row) { 
     console.log('Formset add!'); 
     console.log($(row)); 
     }); 

같은 이벤트 formsetadd 인라인 바인딩하지만/inlines.js 장고 /있는 contrib/관리/미디어 /의 JS에서 을 찾고 시도 이러한 트리거가 장고의 버전 1.3.1에없는 것 같습니다. 인라인을 추가 할 때 트리거되는 이벤트에 바인딩해야합니까? 유사한 케이스가 여기 https://bitbucket.org/mlavin/django-selectable/issue/31/dynamically-added-forms 이지만 formset plugin을 사용하고 있습니다. bindSelectable (행)을 관리자 인라인에 사용할 수 있습니까?

+0

:

프로젝트 소스는 동적 표 인라인을 사용하는 작업 예제가 실려있다. 어떤 버전을 실행하고 있습니까? –

답변

0

새 행을 추가 할 때 bindSelectable(row)을 호출하기 위해 패치를 에 게시해야합니다. http://code.djangoproject.com/ticket/15760이 원숭이 패치는 필요 없지만 닫히지 않았으며 Django 1.4에서는 닫히지 않을 것입니다. 다시 한번이 작업을 수행하기 위해 아무 것도 할 필요가 없습니다. 템플릿을 변경할 필요가 없습니다. 추가 JS를 작성할 필요가 없습니다. 당신은이 일을 위해 아무것도 할 필요가 없습니다 https://bitbucket.org/mlavin/django-selectable/src/33e4e93b3fb3/example/core/admin.py#cl-39

+0

좋습니다, 감사합니다. 도움이 될 경우 tabular.html의 onAfterAdded 함수에 bindSelectables ('row')를 추가하여 문제를 해결했습니다. – Rory

+0

예, 작동 할 것입니다.하지만이 수정 사항을 작성할 때 피하려고했던 것입니다. 다시 한번 말하지만'admin/edit_inline/tabular.html'은 예제 프로젝트에서 수정되지 않았지만 동적 인라인은 작동합니다 (적어도 저에게는). –