django比fixtures内容生成应用程序稍微聪明一点。
django-generate的Python项目详细描述
Django Generate
django比fixtures内容生成应用程序稍微聪明一点。
django-generate添加了一个名为generate的管理命令,该命令允许您从动态创建的上述对象的json描述中创建对象。它的主要焦点是生成用于项目开发和测试的测试内容。对象只通过django的get_or_create方法创建一次。在需要的地方创建继承基础模型对象。文件字段也可以从任意资源填充。这样,与Django’s built in fixtures feature相比,django-generate简化了生成复杂对象的过程。
内容
这个包是更大的Jmbo项目的一部分。
Installation
- 在python路径中安装或添加django-generate。
- 将generate添加到INSTALLED_APPS设置中。
Usage
为了生成内容,您需要执行generate管理命令。此命令将在每个应用程序中搜索INSTALLED_APPS设置中指定的generator模块,并调用其generate方法。此方法应返回要创建的json序列化对象的列表。
注意:生成也在syncdb之后触发,此时将提示您生成默认内容。如果回答“是”,则将以与手动运行generate命令相同的方式生成提示内容。
例如,可以创建5个虚拟用户进行测试。
在要生成内容路径的应用程序中创建generator.py。
确保在INSTALLED_APPS设置中指定了应用程序。还要确保你的应用程序有一个models.py,以便django正确安装它。
编辑generator.py文件如下:
def generate(): objects = [] for i in range(1, 6): objects.append({ "model": "auth.User", "fields": { "username": "user_%s" % i, "first_name": "User %s Name" % i, "is_staff": True, }, }) return objects
这实际上是在动态地生成一堆json序列化对象。返回的objects列表如下:
[{'fields': {'username': 'user_1', 'first_name': 'User 1 Name', 'is_staff': True}, 'model': 'auth.User'}, {'fields': {'username': 'user_2', 'first_name': 'User 2 Name', 'is_staff': True}, 'model': 'auth.User'}, {'fields': {'username': 'user_3', 'first_name': 'User 3 Name', 'is_staff': True}, 'model': 'auth.User'}, {'fields': {'username': 'user_4', 'first_name': 'User 4 Name', 'is_staff': True}, 'model': 'auth.User'}, {'fields': {'username': 'user_5', 'first_name': 'User 5 Name', 'is_staff': True}, 'model': 'auth.User'}]
这是一个将要创建的对象的普通django json fixtures列表。您可以很容易地硬编码并返回此列表,而不是生成它。关键是generate方法应该返回要创建的json序列化对象的列表。
运行generate management命令生成对象:
$ python manage.py generate
命令完成后,数据库中应该有5个新创建的人员用户。如果要再次运行generate命令,则不会创建新用户,因为django-generate会检测到以前生成的对象的存在。
查看jmbo-post’s generator以了解如何使用django-generate轻松创建具有继承结构、关系和文件资源的对象。
Praekelt Foundation
- 肖恩·塞普顿
- 乔纳森·拜登迪克
- 尤安·乔克
- 赫德利·鲁斯
Changelog
0.0.6
- 使用_default_manager而不是objects管理器来允许重写。
0.0.5
- 仅传递支持精确查找以获取或创建的字段。
0.0.4
- 强制每次执行方法时提交,因为设置可能指定事务管理的数据库层。
- 防止重复调用save()。
- 支持外键ID的直接分配。
0.0.3 (2011-08-12)
- 更正的清单。
0.0.1
- 初次发布。