Python django可选-从模板保存数据时出现问题
我正在使用django Selective,但无法从模板中保存表示类别id的“id”('autocomplete_1') models.pyPython django可选-从模板保存数据时出现问题,python,django,django-apps,Python,Django,Django Apps,我正在使用django Selective,但无法从模板中保存表示类别id的“id”('autocomplete_1') 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 cla
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)
查找.py
class CategoryLookup(ModelLookup):
model = Category
search_fields = ('cat_txt__icontains', )
forms.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))
回溯:
/bsmain/cattest处的键错误/
“自动完成1”
申请方式:邮寄
请求URL:
Django版本:1.3.1
异常类型:KeyError
异常值:
“自动完成1”
异常位置:/home/bill/workspace/boatsite/。/boatsite/bsmain/views.py在cattest中,第64行
Python可执行文件:/usr/bin/Python
Python版本:2.6.5
请求信息
得不到数据
后置变量值
info u'44# Bruce'
csrfmiddlewaretoken u'9ffe49bd68be04087521e71e86a5bec0'
autocomplete_1 u'10'
autocomplete_0 u'Anchors'
表单数据字典根据字段名填充。您应该从
form.cleaned_data['autocomplete']
访问数据
编辑:
通过使用模型表单
,这可能会更容易:
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))
马克,我以前试过。我收到一个错误:ValueError位于/bsmain/cattest/无法分配“u”:“cattest.category”必须是“category”实例…如果我使用form.cleaned_数据['category']我在/bsmain/cattest/“category”上收到了KeyError,我认为django Selective是一个很棒的应用程序,我希望我能尽快让它为我工作。与您当前的表单相关的一些问题<代码>自动完成不是必需的,但要填充的类别是。它也不会将正确的类型作为第一条注释返回。我添加了一个使用ModelForm的示例。谢谢Mark。终于成功了!我很接近,但接近并不能阻止它。我仍然不知道表单如何知道如何收集id而不是值,但它是有效的。我稍后会想出“怎么做”。现在,我可以前进并处理链式选择。喜欢你的应用程序。