在ModelForms中使用重音验证Django选项

2024-06-26 10:34:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Django有这个模型:

@python_2_unicode_compatible
class Student(models.Model):
    CHOICES = (('Graduación', 'Graduación'),
               ('Baja Temporal', 'Baja Temporal'),
               ('Expulsión', 'Expulsión'))
    persona = models.OneToOneField(Persona)
    enrollemente_code = models.CharField(max_length=10, unique=True)
    prev_school = models.CharField(max_length=256, blank=True, null=True)
    medical_notes = models.TextField(null=True, blank=True)
    enrollement_date = models.DateField()
    egress_date = models.DateField(blank=True, null=True)
    egress_reason = models.CharField(max_length=64, choices=CHOICES,
                                 blank=True, null=True)
    egress_comments = models.TextField(null=True, blank=True)

    def __str__(self):
        return self.persona.get_full_name()

我创建了这个模型:

^{pr2}$

当我打电话给取消注册。有效吗()在我看来,我得到这样的警告:

UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal '==': infix(10, lambda context, x, y: x.eval(context) == y.eval(context)),

出口原因字段被认为是错误的。在

你知道有什么方法可以证明这一点吗?或者掉头?在


Tags: 模型truemodelscontextnulllengthmaxchoices
2条回答

注意,在CHOICES数组中,您的条目应该是(code, label)。代码是Django在内部和数据库中实际使用的代码,而标签是纯粹的表示。在

在这里,你遵循这个惯例是有意义的。除此之外,这将使项目的国际化变得更容易(如果需要的话)。顺便说一句,这也会让你的问题消失:

CHOICES = (('graduated', 'Graduación'),
           ('temporary', 'Baja Temporal'),
           ('expelled', 'Expulsión'))

请注意,如果您的数据库中已经有数据,您将不得不以某种方式迁移它。在


现在,根据您使用的Python版本,确保非ASCII字符串声明为unicode也是一个好主意(否则,您将由Python在运行时猜测它们的编码)。在

具体来说,在python2中,您应该执行以下操作(在python3中,您不需要执行任何操作):

^{pr2}$

另外,一定要声明文件的编码。第一行应该是:

^{3}$

注意,这假设您的文件是用utf-8编码的,但这是一个非常安全的假设。在

我使用的是python2.7,我解决了这个问题,比如在字符串中添加一个'u'

u'Explicación'

应用于标签

labels = {
            'anio': _(u'Escriba el año'),
            'tarjetacirculacion': _(u'# de tarjeta de circulación'),
        }

相关问题 更多 >