如何使用模型将过滤的数据行从表移动到另一行

时间:2019-02-20 19:44:21

标签: python django django-models bulkinsert

我有两个模型类A和B,我想将表A的某些行移到表B,我想知道如何正确地做到这一点。

models.py

from django.db import models

class Category(models.Model):
    name = models.CharField(max_length=200)

class A(models.Model):
    title = models.CharField(max_length=200)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)

class B(models.Model):
     title = models.CharField(max_length=200)
     category = models.ForeignKey(Category, on_delete=models.CASCADE)

views.py

的代码
from models import A, B

def move(request):
    filtered_a = A.objects.filter(category=2)
    """
    Here I want to move filtered_a rows to B table,
    and how to deal with the id 
    """

请不要谈论迁移,它是单击操作后的一种处理方式,欢迎您使用任何干净快捷的方式进行迁移。

先谢谢您。

1 个答案:

答案 0 :(得分:0)

def move(request):
    filtered_a = A.objects.filter(category=2)
    filtered_b = [B(**a) for a in filtered_a]
    B.objects.bulk_create(filtered_b)

这应该可以解决问题。如果您的查询集将变得庞大,我建议在循环时使用迭代器。

[B(**a) for a in filtered_a.iterator()]