django 使用不同的外键更新多个实例

问题描述

我正在尝试复制多个数据我只需要更改它们相关的外键我的问题是我能够复制但下面是我的代码 任何建议请

from django.db import models


class Category(models.Model):
    category_name = models.CharField(max_length=100)

    def __str__(self):
        return self.category_name

class Client(models.Model):
    cat = models.ForeignKey(Category,on_delete=models.CASCADE,null=True,blank=True)
    fname = models.CharField(max_length=100)
    lname = models.CharField(max_length=100)
    age = models.IntegerField()
    married = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_Now_add=True)
    updated_at = models.DateTimeField(auto_Now=True)

    def __str__(self):
        return self.fname + " " + self.lname + " " + str(self.cat)


def show_category(request,cat_id):
    clients = Client.objects.filter(cat__id=cat_id)
    if request.method =='POST':
        for i in clients:
            i.id = None
            i.cat.id=3
            i.save()
        return redirect('/')


    context = {'clients':clients}
    return render(request,'app/home_cat.html',context)

解决方法

请参阅 copying model instances 上的文档:

    def change_category(clients,new_category_id):
        for client in clients:
            client.pk = None
            client._state.adding = True
            client.cat_id = new_category_id
            client.save()