2012-03-01 7 views
0

django-selectableを使用していて、カテゴリのIDを表す "id"( 'autocomplete_1')をテンプレートから保存するのに問題があります。django-selectable - テンプレートからデータを保存できません

models.py

class Category(models.Model): 
cat_no = models.IntegerField(null=True, blank=True) 
cat_txt = models.CharField(max_length=45)  
def __unicode__(self): 
    return self.cat_txt 

class Cattest(models.Model): 
category = models.ForeignKey(Category)  
info = models.CharField(max_length=35, blank=True) 

class CategoryLookup(ModelLookup): 
model = Category 
search_fields = ('cat_txt__icontains',) 

forms.py lookups.py

class CategoryForm(forms.Form): 
autocomplete = forms.CharField(
    label='Type the name of a category (AutoCompleteWidget)', 
    widget=selectable.AutoCompleteWidget(CategoryLookup), 
    required=False, 
) 
autocompleteselect = selectable.AutoCompleteSelectField(
    lookup_class=CategoryLookup, 
    label='Select a category (AutoCompleteField)', 
    required=False, 
) 

class CattestForm(forms.Form): 
#model = cattest 
#fields = ('category', 'info') 
autocomplete = forms.CharField(
    label='Type the name of a category (AutoCompleteSelectWidget)', 
    widget=selectable.AutoCompleteSelectWidget(CategoryLookup), 
    required=False, 
) 
info = forms.CharField(max_length=35, label="Information") 

views.py

def cattest(request): 
if request.method == 'POST': 
    form = CattestForm(request.POST) 
    if form.is_valid(): 
     cattest = Cattest.objects.create(
      category=form.cleaned_data['autocomplete_1'], 
      info=form.cleaned_data['info'], 
     ) 
     # Always redirect after a POST 
     return http.HttpResponseRedirect('/bsmain/login_customer')    
else: 
    if request.GET: 
     form = CattestForm(initial=request.GET) 
    else: 
     form = CattestForm() 
return render_to_response('bsmain/form.html', {'form': form}, context_instance=RequestContext(request)) 

トレースバック:POST リクエストURL:http://127.0.0.1:8000/bsmain/cattest/ Djangoのバージョン:1.3.1 例外の種類:KeyError例外 例外値/ bsmain/cattest/

'autocomplete_1'

リクエストメソッドで

KeyError例外:

'autocomplete_1'

例外の場所:/ home/cattest中/ boatsite /../ boatsite/bsmain/views.py紙幣/ワークスペース、ライン64 Pythonの実行します。/ usr/bin/pythonの Pythonのバージョン:2.6.5

リクエスト情報

GETありませんデータ POST変数値

info    u'44# Bruce' 
    csrfmiddlewaretoken  u'9ffe49bd68be04087521e71e86a5bec0' 
    autocomplete_1 u'10' 
    autocomplete_0 u'Anchors' 

答えて

1

フォームcleaned_data辞書は、フィールド名に基づいて移入さをGET。 form.cleaned_data['autocomplete']からデータにアクセスする必要があります。

編集:

これはおそらくModelFormを使用して容易になるだろう:

class CattestForm(forms.ModelForm): 

    class Meta: 
     model = Cattest 
     fields = ('category', 'info',) 
     widgets = { 
      'category': selectable.AutoCompleteSelectWidget(CategoryLookup) 
     } 


def cattest(request): 
    if request.method == 'POST': 
     form = CattestForm(request.POST) 
     if form.is_valid(): 
      cattest = form.save() 
      # Always redirect after a POST 
      return http.HttpResponseRedirect('/bsmain/login_customer')    
    else: 
     initial = request.GET or None 
     form = CattestForm(initial=initial) 
    return render_to_response('bsmain/form.html', {'form': form}, context_instance=RequestContext(request)) 
+0

マーク - 私の前にあることを試してみました。私はエラーが発生します:ValueError/bsmain/cattest/ "u" 'を割り当てることはできません: "Cattest.category"は "Category"インスタンスでなければなりません。 – BillB1951

+0

..if私はform.cleaned_data ['category']を使用します。私は/ bsmain/cattest/ でKeyErrorを取得します。 'カテゴリ'私はdjango-selectableがすばらしいアプリだと思っています。 – BillB1951

+0

現在のフォームに関連するいくつかの問題があります。 'autocomplete'は必須ではありませんが、カテゴリには入れたいです。また、最初のコメントメモとして正しいタイプが返されません。 ModelFormを使った例を追加しました。ありがとうございます。 –

関連する問題