账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    django使用bulk_create批量创建,返回的对象不带pk(主键)
    52
    0

    使用django的bulk_create进行批量插入操作(未指定主键), 返回对象列表, 其中的对象主键为None。

    有没有办法能够在批量操作之后返回的结果中携带pk。

    0
    打赏
    收藏
    点击回答
        全部回答
    • 共 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。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部