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

  1. 在python路径中安装或添加django-generate
  2. generate添加到INSTALLED_APPS设置中。

Usage

为了生成内容,您需要执行generate管理命令。此命令将在每个应用程序中搜索INSTALLED_APPS设置中指定的generator模块,并调用其generate方法。此方法应返回要创建的json序列化对象的列表。

注意:生成也在syncdb之后触发,此时将提示您生成默认内容。如果回答“是”,则将以与手动运行generate命令相同的方式生成提示内容。

例如,可以创建5个虚拟用户进行测试。

  1. 在要生成内容路径的应用程序中创建generator.py

  2. 确保在INSTALLED_APPS设置中指定了应用程序。还要确保你的应用程序有一个models.py,以便django正确安装它。

  3. 编辑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序列化对象的列表。

  1. 运行generate management命令生成对象:

    $ python manage.py generate
    

命令完成后,数据库中应该有5个新创建的人员用户。如果要再次运行generate命令,则不会创建新用户,因为django-generate会检测到以前生成的对象的存在。

查看jmbo-post’s generator以了解如何使用django-generate轻松创建具有继承结构、关系和文件资源的对象。

Praekelt Foundation

  • 肖恩·塞普顿
  • 乔纳森·拜登迪克
  • 尤安·乔克
  • 赫德利·鲁斯

Changelog

0.0.6

  1. 使用_default_manager而不是objects管理器来允许重写。

0.0.5

  1. 仅传递支持精确查找以获取或创建的字段。

0.0.4

    使用存在优化。
  1. 强制每次执行方法时提交,因为设置可能指定事务管理的数据库层。
  2. 防止重复调用save()。
  3. 支持外键ID的直接分配。

0.0.3 (2011-08-12)

  1. 更正的清单。

0.0.1

  1. 初次发布。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java中的arraylist二维字符串数组   java Recyclerview继续滚动打开位置   java如何将一个EJB3.1注入另一个EJB   Android Studio(Java的)。setText方法现在使用混合参数   java查找未排序数组的顺序   在java arraylist中查找重复对象   Java支持动态方法调用吗?   java如何在onError()/取消订阅之前一直观察对象   java如何在代码中设置毕加索的背景图像   java在Spring中通过更改环境名称在属性文件之间动态切换   通过使用ldap java登录获取用户和人员列表   用户输入到GUI的java值没有保存?   java如何在创建和显示布局时设置视图的焦点?   Java小程序在图形中显示白色方块。php文件   具有独立共享变量的java同步方法   guava java:缓存数据库表,刷新1小时   Java中颜色计算器的帮助   使用socket从Java向C发送int   java使用单个JAXB注释类对复杂类型进行解组   java Android JNI错误:NoSuchMethodError:无非静态方法