【问题标题】:How to copy a model instance to another model based on attribute value in Django如何根据Django中的属性值将模型实例复制到另一个模型
【发布时间】:2019-07-23 13:23:50
【问题描述】:

当且仅当我的 Tasks 对象中的进度属性设置为“已完成”时,我想将我的 Tasks 类中的模型实例复制到我的 CompletedTasks 类中。我想从 Tasks 类中删除对象。当用户编辑任务并为进度完成输入时,我如何设置它以自动执行此操作

我尝试了几种不同的方法,但我不确定如何去做。下面的函数 completedTasks(self,id) 是我目前拥有的,但它什么也没做。

我的views.py 中还有一个创建和更新任务功能,将所需的功能放在那里而不是models.py 是否有意义?

class Progress(models.Model):
    level =  models.CharField(max_length=30)

class Tasks(models.Model):
    progress = models.ForeignKey(Progress, max_length=20, on_delete=models.CASCADE)

def  completedTasks(self, id):
    instance = Tasks.objects.get(pk = id)

    if(instance.progress == "completed"):
        temp = CompletedTasks()
        temp = instance 
        temp.save()
        instance.delete()

class CompletedTasks(Tasks):

【问题讨论】:

  • 对任务类使用保存后信号处理程序。
  • 非常详细的答案,再说一遍。
  • 很快会有人为你写一个简短的答案。
  • 您说进度属性需要设置为已完成,但进度是进度类的外键。这应该是一个字符字段吗?

标签: python django model copy instance


【解决方案1】:

你的观点可以是这样的

def  completedTasks(self, id):
    instance = Tasks.objects.get(pk = id)

    if(instance.progress == "completed"):
        temp = CompletedTasks(**instance.__dict__)
        temp.id = None # to force adding new record
        temp.save()
        instance.delete()

但在设计上,你不需要将Task移动到completeTask,根据状态进行过滤就足够了。

【讨论】:

  • 会尝试这个,但现在它一直告诉我我需要 Progress 类的实例而不是“完成”。正确的语法是什么?
  • 哪一行告诉你?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-27
  • 1970-01-01
  • 1970-01-01
  • 2019-08-01
  • 2013-11-20
  • 2021-07-06
相关资源
最近更新 更多