是否可以使用另一个具有相同属性的对象创建对象?
就我而言,我有两个模型 - TemporaryJob
和Job
。用户填写表单时会创建TemporaryJob
。接下来要确认一下。如果他确认TemporaryJob
,则应将对象转换为常规Job
对象。
class Job(models.Model):
attributes
methods
class TemporaryJob(Job):
pass
我已经尝试了Job.objects.create(temporary_job_instance)
,但它不起作用。
答案 0 :(得分:2)
首先,Klaus D.评论是正确的:我也不认为你的设计是正确的。不要让Job
和TemporaryJob
模型具有相似字段,您应该只有Job
模型,其中包含一个布尔is_temporary
字段True
临时工作或False
,如果没有。如果你这样做,那么你就不需要复制表之间的值。如果您有标准化的数据,那么您将体验到的所有其他问题将很容易解决 more 。
在任何情况下,要真正回答你的问题,请注意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或这个{{3 }}
答案 1 :(得分:1)
这就是我的工作。如果您保存您的temporary_job_instance可能会很糟糕,所以请不要这样做。
.home-nav {
width:1240px;
height:49px;
background-color:#F1B84E;
border:5px solid #FFDE84;
border-style:outset;
}
.nav-btn {
width:auto;
height:49px;
background-color:#F1B84E;
border:none;
font-family:showcard gothic;
color:white;
-webkit-text-stroke:1.25px #000000;
-webkit-text-fill-color:#FFFFFF;
font-size:20px;
}
.play-btn {
width:auto;
height:69px;
background-color:#79E119;
-moz-border-radius:10px;
-webkit-border-radius:10px;
border:5px solid #FFFFFF;
font-size:20px;
font-family:showcard gothic;
color:white;
}