0

变量名中是否可以有冒号?我已经尝试过反斜杠,但它不起作用......

我正在使用 geoDjango,所以我的模型中的标识符必须与数据库中的标识符保持相同的名称。问题是,当我从 OSM 迁移数据时,我有一些以冒号命名的列(即 addr:housenumber)

这是一个例子:

class myClass(models.Model):
# ...
addr:housename = models.TextField(blank=True)

当我尝试同步时:

addr:housename = models.TextField(blank=True)
    ^
SyntaxError: invalid syntax

这似乎很正常。当我尝试转义冒号时,我遇到了另一个错误:

addr\:housename = models.TextField(blank=True)
                                             ^
SyntaxError: unexpected character after line continuation character

我真的不明白为什么我得到这个错误。

有人知道如何将列放入标识符中吗?

4

3 回答 3

2

使用db_column字段参数指定您的真实列名。是的,python 中的标识符名称中不允许使用冒号。

class myClass(models.Model):
    addr_housename = models.TextField(blank=True, db_column="addr:housename")
于 2013-05-06T09:04:41.917 回答
1

简短的回答是 Python 变量名中根本不允许使用冒号。只能有字母、数字和下划线。实际上,如果可能,您应该用下划线替换所有冒号。

如果您的变量是类属性 - 这里似乎不是这种情况 - ,您可以使用setattrgetattr拥有类属性名称,其中包含您想要的任何字符,但这会很丑陋,您将无法使用他们没有setattr也没有getattr了。这是一个例子:

class A: pass

a = A()
setattr(a, 'addr:housename', models.TextField(blank=True))
some_var = getattr(a, 'addr:housename')
于 2013-05-06T09:05:23.813 回答
0

为什么不定义多个模型并通过外键链接它们,就像在实体关系模型中应该做的那样:

class Address(models.Model)
    housename = models.TextField(blank=True)
    ...

class myClass(models.Model):
    address = models.ForeignKey('Address')
    ...
于 2013-05-06T09:08:37.767 回答