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

3 投票
1 回答
1931 浏览
提问于 2025-04-18 03:32

简单来说,我正在创建一个应用程序,让用户可以拥有多种技能。所以我把它设置成这样:

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个技能只在服务器第一次启动时创建。那我应该在哪里创建这些初始的技能对象呢?有没有更好的方法来实现这个?

1 个回答

2

你可以创建一个叫做 fixtures.json 的文件,然后使用 loaddata 命令来加载数据。

fixtures.json

[
    {
        "pk": 1,
        "model": "appname.skill",
        "fields": {
            "name": "skill name",
        }
    }
}

命令行输入:

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

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

撰写回答