[英]How to create in Django an object of a model while creating another of a different model?
[英]How to create an object using another model with same attributes in Django
是否可以使用另一個具有相同屬性的對象來創建對象?
就我而言,我有兩個模型TemporaryJob
和Job
。 用戶填寫表單時,將創建TemporaryJob
。 接下來是要確認。 如果他確認TemporaryJob
,則應將對象轉換為常規Job
對象。
class Job(models.Model):
attributes
methods
class TemporaryJob(Job):
pass
我已經嘗試過Job.objects.create(temporary_job_instance)
但是它不起作用。
首先,Klaus D.的評論是正確的:我也不認為您的設計是正確的。 而不是讓Job
和TemporaryJob
模型具有相似的字段,您應該只擁有一個具有布爾is_temporary
字段的Job
模型,該字段的True
為臨時工作,否則為False
。 如果采用這種方式,則無需在表之間復制值。 如果您擁有標准化的數據,則將更輕松地解決您將遇到的所有其他問題。
無論如何,要真正回答您的問題,請注意objects.create()
使用的是kwargs(即,應像Job.objects.create(attr1=val1, att2=val2)
這樣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:將模型對象的整個集合轉換為單個字典
這就是我的工作。 如果您保存temporary_job_instance可能會很糟糕,請不要這樣做。
a_dict = temporary_job_instance.__dict__
del a_dict['_state']
del a_dict['id']
Job.objects.create(**a_dict)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.