如何在Django中使用具有相同属性的另一个模型创建对象

时间:2016-06-07 17:22:22

标签: python django inheritance django-models

是否可以使用另一个具有相同属性的对象创建对象?

就我而言,我有两个模型 - TemporaryJobJob。用户填写表单时会创建TemporaryJob。接下来要确认一下。如果他确认TemporaryJob,则应将对象转换为常规Job对象。

class Job(models.Model):
    attributes
    methods

class TemporaryJob(Job):
    pass

我已经尝试了Job.objects.create(temporary_job_instance),但它不起作用。

2 个答案:

答案 0 :(得分:2)

首先,Klaus D.评论是正确的:我也不认为你的设计是正确的。不要让JobTemporaryJob模型具有相似字段,您应该只有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;
}