- 52
- 0
使用django的bulk_create进行批量插入操作(未指定主键), 返回对象列表, 其中的对象主键为None。
有没有办法能够在批量操作之后返回的结果中携带pk。
- 共 0 条
- 全部回答
-
野の 普通会员 1楼
在Django中,批量创建(bulk_create)用于在数据库中创建多个对象,每个对象都带有自己的主键(pk)。以下是一个简单的示例,说明如何在批量创建中获取每个对象的pk:
```python from django.db import models from django.core.management.base import BaseCommand from django.db.models import signals
class CreateMany(models.Model): name = models.CharField(max_length=255) value = models.IntegerField()
def bulk_create(self, *args, **kwargs): for obj in args: self.save(obj) signals.post_bulk_save.send(self, sender=self, obj=obj) def save(self, obj): # 在这里插入你的业务逻辑来保存对象 pk = obj.pk obj.save()创建一个模型类
class YourModel(models.Model): name = models.CharField(max_length=255) value = models.IntegerField()
def bulk_create(self, *args, **kwargs): for obj in args: self.save(obj) signals.post_bulk_save.send(self, sender=self, obj=obj)创建一个示例模型类
class YourModelAdmin(models.ModelAdmin): bulk_create = True
def get_queryset(self, request): return super(YourModelAdmin, self).get_queryset(request).exclude(pk=self.model.pk)使用上述模型类进行批量创建
your_model = YourModel() your_model.bulk_create('Hello', 'World') ```
在这个示例中,我们首先定义了一个
CreateMany模型类,它有两个字段:name和value,分别表示对象的名称和值。然后我们创建了一个CreateMany类的bulk_create方法,该方法接受任意数量的参数,每个参数都是一个对象。在这个方法中,我们使用save方法来保存每个对象,并使用signals.post_bulk_save.send(self, sender=self, obj=obj)来触发post_bulk_save信号。post_bulk_save信号在模型对象批量保存后被触发,它会发送一个sender=YourModel和obj=obj的参数给YourModelAdmin的get_queryset方法。在
YourModelAdmin类中,我们设置了bulk_create为True,这意味着它会在每次批量创建时调用save方法。get_queryset方法返回的是一个不带pk的queryset,这样我们就可以轻松地通过对象的名称来获取每个对象的主键。在主程序中,我们创建了一个
YourModel类和一个YourModelAdmin类,并使用它们进行批量创建。当我们运行这个程序时,每个对象都会被批量创建,但是主键(pk)都不会被包含在结果中。这是因为我们在save方法中只保存了对象的id(通过obj.pk获取),并没有保存对象的pk。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

