我正面临着第一个与编码有关的错误,我很难过。问题出在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)
答案 0 :(得分:2)
entry.title=form.cleaned_data['title'],
最后一个逗号将其转换为您视图中的元组。停止这样做。