2016-06-07 67 views
1

是否可以使用另一个对象创建对象,该对象的模型具有相同的属性?如何使用Django中具有相同属性的另一个模型创建对象

在我的情况下,我有两个模型 - TemporaryJobJob。当用户填写表单时创建TemporaryJob。接下来的事情是确认。如果他确认TemporaryJob,则应将对象转换为常规的Job对象。

class Job(models.Model): 
    attributes 
    methods 

class TemporaryJob(Job): 
    pass 

我试过Job.objects.create(temporary_job_instance)但它不起作用。

+1

为什么不只是使用“确认”属性? –

+0

因为有一个信号表明已经创建了Job,它将电子邮件发送给管理员。所以在这种情况下,管理员在创建未确认的作业后会收到电子邮件。 –

+1

那么,这是一个信号处理的问题。 –

回答

2

首先,克劳斯D.评论是正确的:我也不认为你的设计是正确的。而不是JobTemporaryJob模型具有类似的字段,你应该只有一个Job模型,其布尔is_temporary字段将是True这是一个临时工作或False如果不是。如果你这样做,那么你不需要复制表格之间的值。如果你有规范化的数据,你将遇到的所有其他问题将很容易解决更多

在任何情况下,真正回答你的问题,注意objects.create()使用kwargs(即它应该被称为像Job.objects.create(attr1=val1, att2=val2)等输出的最好方式,这些kwargs是创造你想要的对象的值的字典通过(的temporary_job_instance值),并使用拆包语法(**),它传递给create。所以,如果values是与temporary_job_instance值的字典,你可以只调用Job.objects.create(**values)

现在你只需要创建values字典从你的temporary_job_instance。不幸的是,有没有简单的方法来做到这一点在Django :(它可以做到 - 但你可以看看这些问题的一些见解和很多做法的方法:Convert Django Model object to dict with all of the fields intact或此Django: Converting an entire set of a Model's objects into a single dictionary

0

这就是我所做的。如果你保存你的temporary_job_instance可能会很糟糕,所以不要这么做。

a_dict = temporary_job_instance.__dict__ 
del a_dict['_state'] 
del a_dict['id'] 
Job.objects.create(**a_dict) 
相关问题