Python 在models.py中填充表项

Python 在models.py中填充表项,python,django,django-models,Python,Django,Django Models,我是数据库新手,所以我的想法可能有缺陷,但我想使用Django为webapp定义一个具有固定条目(=初始数据)的表。这些条目将被定义一次,保持不变,并且在协作者提取代码时应在本地和向协作者显示。我认为在开发阶段,我需要多次从头开始设置整个数据库,一些初始数据会从models.py自动填充。在models.py中是否有方法用这些条目填充表 class Field(models.Model): name = models.CharField(max_length=200) creat

我是数据库新手,所以我的想法可能有缺陷,但我想使用Django为webapp定义一个具有固定条目(=初始数据)的表。这些条目将被定义一次,保持不变,并且在协作者提取代码时应在本地和向协作者显示。我认为在开发阶段,我需要多次从头开始设置整个数据库,一些初始数据会从models.py自动填充。在models.py中是否有方法用这些条目填充表

class Field(models.Model):
    name = models.CharField(max_length=200)
    created_timestamp = models.DateTimeField(auto_now_add=True)

所使用的术语是初始数据,正如第一条评论中已经指出的,而不是固定数据

应用程序投入生产后,可以编辑或删除初始数据中的条目,以防您在业务逻辑中提供适当的操作

值得一提的是,如果您使用以下命令将初始数据作为fixture(JSON、YML等)提供:

python manage.py loaddata path/to/your/data
不会调用model方法
save
。您还有以下字段:

created_timestamp = models.DateTimeField(auto_now_add=True)
不会是自动生成的。这意味着,如果为类
字段提供数据,则必须为上述字段提供值:

您的设备可能看起来像这样:

[
    {
        "model": "app_label.field",
        "pk": 1,
        "fields": {
            "name": "foo",
            "created_timestamp": "2018-03-12 12:00:00"
        }
    },
    # further entries
]
如果主键是自动字段,则可以省略它。然后,数据库系统将自动填充它

如果在应用程序目录中创建目录
fixtures
,则只需调用其名称即可加载该fixture。假设你有这样的结构:

- project
    - manage.py
    - yourapp
        - admin.py
        - models.py
        - fixtures
            field.json
然后你可以做:

python manage.py loaddata field

所使用的术语是初始数据,正如第一条评论中已经指出的,而不是固定数据

应用程序投入生产后,可以编辑或删除初始数据中的条目,以防您在业务逻辑中提供适当的操作

值得一提的是,如果您使用以下命令将初始数据作为fixture(JSON、YML等)提供:

python manage.py loaddata path/to/your/data
不会调用model方法
save
。您还有以下字段:

created_timestamp = models.DateTimeField(auto_now_add=True)
不会是自动生成的。这意味着,如果为类
字段提供数据,则必须为上述字段提供值:

您的设备可能看起来像这样:

[
    {
        "model": "app_label.field",
        "pk": 1,
        "fields": {
            "name": "foo",
            "created_timestamp": "2018-03-12 12:00:00"
        }
    },
    # further entries
]
如果主键是自动字段,则可以省略它。然后,数据库系统将自动填充它

如果在应用程序目录中创建目录
fixtures
,则只需调用其名称即可加载该fixture。假设你有这样的结构:

- project
    - manage.py
    - yourapp
        - admin.py
        - models.py
        - fixtures
            field.json
然后你可以做:

python manage.py loaddata field

类只是一个蓝图,将根据它创建实际实例

您可能有两种选择: 1.您可以通过代码中的create()或save()方法填充条目。无论如何,您的类中都应该有默认值,因此只需使用

model.objects.create()

将自动使用具有默认值的实例填充数据库

  • 如果你已经设置好了你的管理页面,你可以在那里创建模型条目

  • 类只是一个蓝图,将根据它创建实际实例

    您可能有两种选择: 1.您可以通过代码中的create()或save()方法填充条目。无论如何,您的类中都应该有默认值,因此只需使用

    model.objects.create()

    将自动使用具有默认值的实例填充数据库

  • 如果你已经设置好了你的管理页面,你可以在那里创建模型条目

  • 有件事:太好了,谢谢克劳斯!如果其他表指向这样初始化的表的条目,那么引用就可以了,因为我还定义了主键。是吗?另一种方法可能是用模糊生成的数据编写工厂。看一看:有一些东西:太好了,谢谢克劳斯!如果其他表指向这样初始化的表的条目,那么引用就可以了,因为我还定义了主键。是吗?另一种方法可能是用模糊生成的数据编写工厂。看看:是的,他可以使用管理员在那里创建模型条目。但这与目的背道而驰,因为在正常情况下,部署这些条目时会丢失。创建fixture会将它们放在版本控制中,它们可以作为项目代码的一部分推送。是的,他可以使用admin并在那里创建模型条目。但这与目的背道而驰,因为在正常情况下,部署这些条目时会丢失。创建fixture会将它们放在版本控制中,它们可以作为项目代码的一部分推送。非常好,非常感谢您对cezar的完美介绍!太好了,非常感谢你对塞萨尔的完美介绍!