2013-05-25 27 views
1

我有一個模型,看起來像這樣:Django的模式:使用生成器來創建數據

class ab(models.Model): 
    a = models.CharField(max_length=8, primary_key=True) 
    b = models.CharField(max_length=120) 

現在不是

ab(a = 'a', b = 'b').b 

我能做到這一點

ab('a', 'b').b 

它在這兩種情況下都會返回我'b'。所以這給了我一些希望。

我正在寫兩個數據庫之間的映射,我需要這樣的:

def createRecord(table, row): 
    return table([x for x in row]) 

但是它並沒有在所有列插入數據,而只是一個列表中的第一列。是否有可能實現我想要做的事情?

+0

請注意這個問題與python生成器無關 – shx2

回答

1

你試過嗎?

return table(*row) 

我認爲一個更好的做法是在創建Model對象時傳遞關鍵字參數。如果你已經在列表中有fields字段名,你可以這樣做:

return table(**dict(zip(fields, row))) 

如果你不這樣做,你可以使用類似搶吧:

fields = [ f.name for f in ab._meta.fields ] 

(您可以選擇濾除id字段)。

順便說一下,table([x for x in row])是一樣的table(row)(除了它不創建副本,但在這種情況下應該沒關係)。

+0

這就是它!謝謝 –