2014-09-26 16 views
1

我希望能夠通過指定相關對象的主鍵來構造新的Django對象,而不是將這些相關對象加載到內存中以傳遞給模型的構造函數。這可能嗎?是否有模型創建工廠或類似的東西來構造底層SQL,而不實際加載對象到內存中?構建新的Django模型對象,但不將所有相關模型加載到內存中

例子:

class ObjectChildEntity(models.Model): 
    myobject = models.ForeignKey(MyObject) 
    some_data = models.TextField(null=False,blank=False) 
    related_stuff = models.ForeignKey(StuffModel) 

我希望能夠做這樣的事情:

new_child_entity= django.db.models.new(ObjectChildEntity, myobject__id = 123, some_data='foo', related_stuff__id = 456) 

這當然不是真正的方法,但我想做到的是避免將ID爲123的實例加載到內存中,並將ID爲456的實例加載到內存中,僅用於將這兩個對象傳遞到構造函數ObjectChildEntity中。

Django對象創建時是否存在類似的東西,而無需滾動我自己的自定義SQL?

回答

2

這應該工作正常使用通常的模型類的構造函數和_id名稱,而不是在爲外鍵ID您的示例代碼__id鏈關係:

new_child_entity = ObjectChildEntity(myobject_id=123, some_data='foo', related_stuff_id=456) 
new_child_entity.save() 

或者,如果你已經覆蓋了db_column字段在模型字段聲明中,該名稱代替myobject_id

+0

這適用於db_column是'id'的情況,但如果db_column字段本身中有下劃線(例如'foo_id'),則不起作用。 – ValAyal 2014-09-29 15:47:06

+0

如果FK字段本身被命名爲'foo_id',我將不得不檢查Django如何構建隱含的實際'db_column'字段 - 可能是'foo_id_id'。但我想不出你想要這樣做的真實世界的情況。對於遺留數據庫,將'foo_id'版本保留爲'db_column'值,並將該字段命名爲合理的。使用非遺留數據庫,將該字段命名爲合理的,並讓Django選擇'db_column'。重點是讓FK字段的名稱與'db_column'不匹配,然後將'db_column'設置爲整數FK而不是Python對象。 – 2014-09-29 15:59:54

相關問題