【问题标题】:django-selectable - trouble saving data from templatedjango-selectable - 从模板保存数据时遇到问题
【发布时间】:2012-03-01 23:57:50
【问题描述】:

我正在使用 django-selectable 并且无法从模板中保存代表类别 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

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

lookups.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/ 处的 KeyError

'autocomplete_1'

请求方法:POST 请求网址:http://127.0.0.1:8000/bsmain/cattest/ Django 版本:1.3.1 异常类型:KeyError 异常值:

'autocomplete_1'

异常位置:cattest 第 64 行中的 /home/bill/workspace/boatsite/../boatsite/bsmain/views.py Python 可执行文件:/usr/bin/python Python 版本:2.6.5

索取资料

GET 无 GET 数据 POST 变量值

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

【问题讨论】:

    标签: python django django-apps


    【解决方案1】:

    根据字段名称填充表单cleaned_data 字典。您应该从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))
    

    【讨论】:

    • 马克——我以前试过。我收到一个错误:ValueError at /bsmain/cattest/ 无法分配“u''”:“Cattest.category”必须是“Category”实例。
    • ..如果我使用 form.cleaned_data['category'] 我在 /bsmain/cattest/ 'category' 得到 KeyError 我认为 django-selectable 是一个很棒的应用程序,我希望我可以让它工作我很快。
    • 有几个问题与您当前的表单有关。 autocomplete 不是必需的,但要填充的类别是。它也不会像您的第一条评论注释那样返回正确的类型。我添加了一个使用 ModelForm 的示例。
    • 谢谢马克。终于成功了!我很接近,但接近并没有削减它。我仍然不知道表单如何知道收集 id 而不是值,但它可以工作。稍后我会弄清楚“如何”。现在我可以继续前进并处理链式选择。喜欢你的应用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 2020-07-29
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多