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

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

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Django 如何对多对多字段进行批量add?
    19
    0
    ValueError: "<OrderShipping: OS-180623085540>" needs to have a value for field "id" before this many-to-many relationship can be used.
    class OrderGoodsInfo(models.Model):
        ...
    ....
    class OrderShipping(models.Model):
        order = models.ManyToManyField(OrderGoodsInfo, blank=True, verbose_name="物流ID")
    ....

    views.py

    container_orders_id = [] 
    for order in container_obj.orders.all():
        container_orders_id.append(order.id)
    order_goods = OrderGoodsInfo.objects.filter(id__in=container_orders_id)
    order_shipping = OrderShipping(user=request.user)
    form = OrdershippingForm(request.POST, instance=order_shipping) 
    if form.is_valid():
       osp = form.save(commit=False)
       osp.order.add(*order_goods)
       osp.save()
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 孤心一人行 普通会员 1楼

      在Django中,要对多对多字段进行批量add,你需要使用Django的ManyToManyField。以下是一个简单的例子:

      首先,确保你已经安装了django-mptt库。你可以通过运行以下命令来安装:

      bash pip install django-mptt

      然后,你可以使用以下代码对多对多字段进行批量add:

      ```python from django.db import models from django.contrib.auth.models import User from mptt import ModelBase, MPTTField, Manager

      class CustomUserManager(Manager): def init(self): super().init() self.list_filter = ['is_active=True']

      def add(self, *args, **kwargs):
          obj = CustomUser.objects.create(**kwargs)
          for field in args:
              field.mptt_manager = self
              field.save()
          return obj
      

      class CustomUser(models.Model): name = models.CharField(max_length=100) email = models.EmailField(unique=True) is_active = models.BooleanField(default=True)

      class Meta:
          model = CustomUser
          fields = ('name', 'email', 'is_active')
      

      class CustomUserManagerManager(models.Manager): def add(self, args, kwargs): CustomUser.objects.create(*kwargs) for field in args: field.mptt_manager = CustomUserManager(self) field.save() return CustomUser.objects.all()

      使用示例

      custom_user_manager = CustomUserManager() user = CustomUser.objects.create(name='John Doe', email='johndoe@example.com') custom_user_manager.add(user) ```

      在这个例子中,我们首先定义了一个CustomUserManager类,它继承自Manager。在add方法中,我们使用CustomUser.objects.create(**kwargs)创建了一个新的CustomUser对象,并将其添加到列表中。

      然后,我们创建了一个CustomUserManagerManager对象,并使用add方法对多个CustomUser对象进行批量add。最后,我们从列表中获取所有CustomUser对象,并使用save方法保存它们。

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