在Django中通过一个按钮创建多个Model对象

2 投票
1 回答
1844 浏览
提问于 2025-04-17 16:53

我想解决我的问题,我一直在寻找答案,但找不到任何解决方案。

假设我有一个模型:

class AccessCode(models.Model):
    access_code = models.CharField(max_length=100, verbose_name='Access code',
    unique=True, default=key_generator)
    def __str__(self):
        return self.access_code
    def __unicode__(self):
       return self.access_code

这个模型里只有一个字段。我想做的是在管理面板里创建一个额外的按钮,用这个按钮自动在我的数据库里生成100个访问码(AccessCodes)。所以我有两个问题:

  1. 如何在管理面板里创建一个自定义按钮,让它执行某些操作?
  2. 如何一步到位自动创建100个某个模型的对象?

key_generator是我自定义的一个函数,用来生成随机字符串作为默认值。

1 个回答

1

你可以使用在Django 1.4中引入的 bulk_create 方法,

AccessCode.objects.bulk_create([AccessCode() for i in range(100)])

不过,这种方法有一些问题,来自Django文档的说明:

不过,这里有一些注意事项:

- The model’s save() method will not be called, and the pre_save and post_save signals will not be sent.
- It does not work with child models in a multi-table inheritance scenario.
- If the model’s primary key is an AutoField it does not retrieve and set the primary key attribute, as save() does.

要在管理页面添加操作,请查看 这个回答,里面有详细的做法。

撰写回答