这是我使用名为modelQuizQuestion
的模型的表单。此模型中包含char
字段。现在一切正常,如果该模型中的char字段没有引号。否则我会在form.is_valid()
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128)
class DynamicQuizForm(forms.Form):
def __init__(self, patient, *args, **kwargs):
super(DynamicQuizForm, self).__init__(*args, **kwargs)
question_qset = modelQuizQuestion.objects.filter(patient=patient)
counter = 0
for question in question_qset:
counter+=1
#Construct choices
choice_qset = modelQuizChoice.objects.filter(question=question)
main_choices = []
for choice in choice_qset:
small_choices = []
small_choices.append(choice.choice)
small_choices.append(choice.choice)
main_choices.append(small_choices)
self.fields[question.question] = forms.ChoiceField(choices=main_choices, widget=forms.RadioSelect(),)
这就是我使用它的方式
if request.method == "POST":
quizForm = DynamicQuizForm(patient=patient_qset, data=request.POST)
if quizForm.is_valid(): #<------------ gives exception here
.....
为什么会发生这种情况的任何建议。 我看了这两个链接 link1 和link2
然而,似乎这是一个unicode问题,答案建议使用decode
代替str
。在我的代码中,我没有在任何地方使用str
更新
我认为这个问题的原因是因为声明
self.fields[question.question] = forms.ChoiceField(choices=main_choices, widget=forms.RadioSelect(),)
仅当question.question
中包含带撇号的字符串时才会出现此情况。
这是问题模型
class modelQuizQuestion(models.Model):
patient = models.ManyToManyField(modelPatient,default=None,blank=True)
question = models.CharField(max_length=800, unique=True)
class Meta:
verbose_name_plural = "Questions in the Quizes"
def __unicode__(self):
return "Question : " +self.question
有关我如何解决此问题的任何建议?
答案 0 :(得分:0)
在所有文件的第一行输入:
# -*- coding: utf-8 -*-
尝试实现以下类:
class modelQuizQuestion(models.Model):
patient = models.ManyToManyField(modelPatient,default=None,blank=True)
question = models.CharField(max_length=800, unique=True)
class Meta:
verbose_name_plural = "Questions in the Quizes"
def __str__(self):
return "Question: %s" % self.question
如果您正在使用python 3并且希望它与python 2兼容,请使用装饰器python2_unicode_compatible
from django.utils.encoding import python2_unicode_compatible
@python2_unicode_compatible
class modelQuizQuestion(models.Model): ...
如果您还有其他问题,请查看Django的文档。我建议你看一下 str ()和 unicode ()
之间的选择