django - 初始化模型字段,包括manytomanyfields

时间:2012-02-20 03:10:16

标签: django django-models model many-to-many django-orm

所有

我有一套相关的模型:

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

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

当我创建一个新的时,我希望它有一组默认数据。这对于普通字段来说非常容易。但我不知道如何处理关系领域。让我假装我希望每个foo都用名为“我是一个foo”和一组三个条形图进行初始化,每个条形图都有特定的名称(例如,“我是酒吧一个”,“我是酒吧二”,“我是我是三点。“)。

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

我只是不确定如何解决这个问题。有什么建议吗?

2 个答案:

答案 0 :(得分:3)

您不能在没有主键的模型实例上使用多对多关系。

  1. 保存模型,以启用m2m relations
  2. 保存其他型号,以便在另一侧启用m2m关系
  3. 使用.add(),例如yourmodel.bars.add(othermodel)
  4. 如果要设置默认的初始数据,则应use fixtures

答案 1 :(得分:3)

你可以使用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()