在django中,如何在models.py中包含一些默认记录?

时间:2010-05-02 10:55:32

标签: database django django-models

如果我有一个models.py之类的

class WidgetType(models.Model):
     name = models.CharField(max_length=200)

class Widget(models.Model):
     typeid = models.ForeignKey(WidgetType)
     data = models.CharField(max_length=200)

当我知道我只会拥有某些类型的小部件时,如何为WidgetType构建一组内置的常量值?显然,我可以启动我的管理界面并手动添加它们,但我想通过将它内置到python中来简化配置。

2 个答案:

答案 0 :(得分:3)

你可以使用灯具:

http://docs.djangoproject.com/en/dev/howto/initial-data/#providing-initial-data-with-fixtures

严格来说,灯具不是模型的一部分,也不是任何python代码。如果你真的需要你的python代码,你可以听取post_syncdb信号并通过ORM插入你的数据,例如:

from django.db.models.signals import post_syncdb

def insert_initial_data(sender, app, created_models, verbosity, **kwargs):
    if WidgetType in created_models:
        for name in ('widgettype1', 'widgettype2', 'widgettype3'):
            WidgetType.objects.get_or_create(name=name)

post_syncdb.connect(insert_initial_data)

答案 1 :(得分:0)

您可以编写自己的Migration并插入新记录(或执行您想要的任何其他迁移)。

请参阅Django文档中的this article item