2011-11-17 22 views
0

我剛剛重新設計了我的數據庫的一部分,使用多表繼承,現在事情要容易得多!django模型繼承 - 多表 - 手動插入

我確實有一個問題,我試圖在表格中手動插入數千行,現在我無法弄清楚如何去做。

如: 前:

class personal(models.Model): 
    who = models.CharField... 
    stamp = models.DateTime... 
    title = models.CharField ... 
    descr = models.CharField ... 

,並在Python Shell:

for i in range(1000): 
    t=datetime.now() 
    e=timedelta(minutes=i) 
    entry = personal(who='xyz', stamp=t+e, title='title '+str(i), descr='description for '+str(i) 
    entry.save() 

後:

class common(models.Model): 
    who ... 
    stamp ... 

class personal(common): 
    title ... 
    descr ... 

,並在Python Shell,如果我做同樣的事情上面它說個人沒有名爲誰/郵票

我的問題:如何調整上面的'for'在我的新數據庫中插入多行?

謝謝!

回答

0

你可能想抽象模型繼承:

class common(models.Model): 
    who ... 
    stamp ... 

    class Meta: 
     abstract = True 

class personal(common): 
    title ... 
    descr ... 

然後上面的代碼應該工作。

編輯:

對於非抽象繼承,插入代碼應該是這樣的:

for i in range(1000): 
    t=datetime.now() 
    e=timedelta(minutes=i) 
    base = common.objects.create(who='xzy', stamp=t+e) 
    entry = personal.objects.create(common_ptr=base, title='title '+str(i), descr='description for '+str(i) 
+0

我想過這個問題,但如果我使用的抽象模型繼承,那麼我將無法使用通用模型 - 我使用通用模型來檢索最後十個條目(基於郵票),如下所示:common.objects.order_by(' - stamp')[:10] – marlboro

+0

我希望您瞭解性能意義多表繼承(非抽象模型繼承)在Django中有。如果不加以小心使用,它非常低效。 – ojii

+0

謝謝你的提醒......使用多表繼承的唯一的事情是這最後十個條目的代碼(至少現在)...我可能需要重寫我的代碼 – marlboro