Django应用程序在保存数据库条目时在字符串中包含编码符号

时间:2011-05-10 22:30:43

标签: django encoding

我正面临着第一个与编码有关的错误,我很难过。问题出在Django应用程序中,其中包含更新现有数据库条目的表单。当更新表单用于更改条目时,我发现新条目数据包括与编码相关的符号,如引号,括号和u(编码标记)。我似乎犯了一些错误,让Django对我的字符串编码感到困惑。

总结一下,这就是问题所在:
初始状态:条目标题字段是 FooBar
期望状态:条目标题字段是 FooBar2
我得到的是:条目标题字段是(u'FooBar2',)
这些编码标记在我的Django应用程序中打印出来,我确认当我直接从Python shell访问数据库时它们也在那里(如下面的例子所示)

>>>entry.title
u"(u'FooBar2',)"

知道为什么我的表单和视图会将这些表示法保存到数据库中吗?我怎么能阻止它?


这是我用来编辑数据库条目的表单:

class EntryEditForm(forms.Form):
    title = forms.CharField(label=u'Entry title.', max_length=100)
    target = forms.CharField(label=u'Entry target', required=False)
    username = forms.CharField(label=u'Entry-specific username', max_length=100, required=False)
    password = forms.CharField(label=u'Entry-specific password', max_length=100, required=False)

这是用于编辑数据库条目的视图:

def editentry_page(request): 
    if request.method == 'POST':
        form = EntryEditForm(request.POST)
        entryid = unquote(request.POST['entryid'])
        if form.is_valid():
            entry = request.user.entry_set.get(id=entryid)
            entry.title=form.cleaned_data['title'],
            entry.username=form.cleaned_data['username'],
            entry.password=form.cleaned_data['password'],
            entry.targetemail=form.cleaned_data['targetemail'],
            entry.user=User.objects.get(username=request.user)
            entry.save()
            return HttpResponseRedirect('/user/%s/' % request.user.username)
    elif 'entryid' in request.GET: 
        entryid = unquote(request.GET['entryid'])
        try:
            selectedentry = request.user.entry_set.get(id=entryid) 
            title = selectedentry.title
            targetemail = selectedentry.targetemail
            username = selectedentry.username
            password = selectedentry.password
        except (Entry.DoesNotExist):
            raise Http404(u'This entry does not exist or is not your entry') 
        entry = Entry.objects.get(id=entryid)
        form = EntryEditForm({
            'title': entry.title, 
            'email': entry.email, 
            'target': entry.target, 
            'username': entry.username, 
            'password': entry.password, 
            })

    else: 
        raise Http404(u'No entry selected - return to your entries to try again.') 
    variables = RequestContext(request, {'form': form, ‘entryid': unquote(request.GET['entryid']),})
    return render_to_response('entry_edit.html', variables)

这是条目型号

class Entry(models.Model):
    title = models.CharField(max_length=200)
    email = models.EmailField(unique=True)
    password = models.CharField(max_length=200)
    username = models.CharField(max_length=200)
    target = models.CharField(unique=False)
    user = models.ForeignKey(User)

1 个答案:

答案 0 :(得分:2)

entry.title=form.cleaned_data['title'],

最后一个逗号将其转换为您视图中的元组。停止这样做。