2013-05-06 48 views
0

变量名中是否可以冒号? 我已经试图反斜杠,但它不工作...变量标识中的冒号

我使用geoDjango,所以我的模型中的标识符必须保持与数据库中的标识符相同的名称。麻烦的是,当我从OSM迁移数据,我有一些列其间用冒号命名(即地址:housenumber)

下面是一个例子:

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

当我试图执行syncdb :

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

这似乎正常。当我试图逃跑结肠,我有另一个错误:

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

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

有人知道如何把列标识符?

回答

2

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

class myClass(models.Model): 
    addr_housename = models.TextField(blank=True, db_column="addr:housename") 
+0

效果很不错,谢谢:) – Kobz 2013-05-06 12:00:24

1

简而言之,冒号在Python变量名中是不允许的。你只能有字母,数字和下划线。其实,如果可能的话,你应该用下划线代替所有冒号。

如果变量是类属性 - 它似乎并没有被这里的情况 - ,你可以使用setattrgetattr有class属性,你在里面要wathever角色的名字,但是这将是丑陋的,你赢了如果没有setattrgetattr,就无法使用它们。这里有一个例子:

class A: pass 

a = A() 
setattr(a, 'addr:housename', models.TextField(blank=True)) 
some_var = getattr(a, 'addr:housename') 
0

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

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

class myClass(models.Model): 
    address = models.ForeignKey('Address') 
    ...