在Django服务器启动时创建对象的最佳方式是什么?

3

我正在创建一个应用程序,用户可以拥有多种技能。因此,我将其设置如下:

class Skill(models.Model):
  name = models.CharField(max_length=30)

class Listing(models.Model):
  ...(other stuff for the model here)
  skill = models.ManyToManyField(Skill,)

然后我将创建一个类似于这样的表单:
class ListingForm(ModelForm):
  skill = forms.ModelMultipleChoiceField(queryset=Skill.objects.all())
  class Meta:
    model = Listing

最终目标是希望每个技能都显示为表单中的复选框。这样可能有30个技能可供选择,用户可以勾选他们擅长的任何一个。我面临的问题是我必须初始创建那些30个技能对象。我知道如何创建对象,但是不知道在哪里放置代码,以便只有在服务器第一次启动时才会创建这30个技能对象。应该在哪里创建这些初始技能对象?还有更好的方法吗?

你没有可以存储你的“技能”的数据库吗?显然,正确的方法是将你的“技能”存储在一个表中,并从那里查询它们。 - Jimmy Thompson
有一个数据库,但我更喜欢使用Python/Django来完成这个任务,因为我没有太多直接处理SQL的经验,并且由于我仍在开发应用程序并不断更改模型,所以经常删除数据库。 - reparadocs
你应该使用数据库和South(http://south.aeracode.org/)来处理“不断变化”的模型。或者使用Django 1.7! - danielcorreia
我并不想迁移除了 Skill 对象以外的任何内容。在 Django 中,有没有仅在创建数据库时运行的地方可以放置脚本? - reparadocs
1个回答

2
你可以创建一个fixtures.json文件并使用loaddata命令: fixtures.json
[
    {
        "pk": 1,
        "model": "appname.skill",
        "fields": {
            "name": "skill name",
        }
    }
}

命令行:

python manage.py loaddata path/to/fixtures.json

这里提供一些相关的文档:提供初始数据

谢谢!这正是我在寻找的 :) - reparadocs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接