2012-02-20 41 views
1

所有,Django的 - 初始化模型領域,包括manytomanyfields

我有一組相關機型:

class Foo(models.Model): 
    fooName = models.CharField() 
    bars = models.ManyToManyField("Bar") 

class Bar(models.Model): 
    barName = models.CharField() 

當我創建一個新的,我想它有數據的默認設置。這對於普通領域來說很容易。但我不確定如何處理關係領域。讓我們假裝我希望每個foo都以名稱「我是一個富人」和一組三個條形式進行初始化,每個條形碼都有特定的名稱(比如「我是第一個」,「我是第二個」,「I在酒吧三。「)。

def Initialize(self) 
    self.fooName = "I am a foo" 
    self.bars = ?!? 

我只是不知道該怎麼做。有什麼建議麼?

回答

2

您可能不會在沒有主鍵的模型實例上使用多對多關係。

  1. 保存模型,使M2M關係
  2. 保存您的其他型號,使另一側以及
  3. 使用。新增M2M關係(),例如yourmodel .bars.add(othermodel)

如果你想設置默認的初始數據,你應該use fixtures

2

你可以用django的signals來做到這一點。每次創建您的Foo模型的實例時,還可以創建其他的信息,你需要:

class Foo(models.Model): 
    ... 

from django.db.models.signals import post_save 
from signals import create_initial_data 
post_save.connect(create_initial_data, sender=Foo) 

,並在文件名爲signals.py

from models import Bar 
def create_initial_data(sender, instance, created, raw): 
    if created and sender == 'Foo': 
     bar_1 = Bar(...) 
     bar_2 = Bar(...) 
     ... 
     bar_1.save() 
     bar_2.save() 
     ... 
     instance.bars.add(bar_1, bar_2, ...) 
     instance.save()