2013-05-06 83 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') 
    ...