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

Mil*_*ano 1 python django inheritance django-models

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

就我而言,我有两个模型 -TemporaryJobJob. 在TemporaryJob当用户填写表单创建。接下来要做的就是确认。如果他确认TemporaryJob,则该对象应转换为常规Job对象。

class Job(models.Model):
    attributes
    methods

class TemporaryJob(Job):
    pass
Run Code Online (Sandbox Code Playgroud)

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

小智 6

这就是我所做的。如果您保存您的临时作业实例可能会很糟糕,所以不要这样做。

a_dict = temporary_job_instance.__dict__
del a_dict['_state']
del a_dict['id']
Job.objects.create(**a_dict)
Run Code Online (Sandbox Code Playgroud)


Ser*_*eim 5

首先,Klaus D.的评论是正确的:我也不认为你的设计是正确的。您应该只拥有一个具有布尔字段的模型,而不是具有相似Job字段的模型,该布尔字段将是临时工作,或者不是临时工作。如果您采用这种方式,则无需在表之间复制值。如果您拥有规范化的数据,您将遇到的所有其他问题都将更容易解决TemporaryJobJobis_temporaryTrueFalse

在任何情况下,要真正回答您的问题,请注意正在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 中没有简单的方法可以做到这一点:( 不过这是可以做到的——你可以看看这些问题以获得一些见解和很多方法:将 Django Model 对象转换为 dict ,其中包含所有完整的字段或此Django:将整个模型对象集转换为单个字典