2017-10-15 56 views
0

我以學院用戶的身份登錄到我的應用程序,並且必須保存學生的詳細信息。 學生模型有一列作爲FK到學院模型。如何避免在Django中每次需要外鍵都要打DB

institute = models.ForeignKey('institute.InstituteDetailsModel', to_field="sys_id", on_delete = models.SET_NULL, null=True, blank=True) 

我每次註冊學生時,都必須打開數據庫才能獲得學院實例並在保存學生細節時使用它。在做其他事情時,這種數據庫觸發的情況在許多地方出現。

爲了避免撞上DB每次我試圖做的事情如下:
從數據庫獲取機構實例在登錄時和
1.將其轉換爲使用model_to_dict快譯通(因爲需要系列化問題單獨處理日期)和在會話中存儲。
2.使用django的序列化框架序列化它並存儲在會話中。

但我在上面的方法分別得到以下問題:
1.使用ModelForms保存數據。

data["institute_id"] = request.session["institute"]["id"] 
form = StudentForm(data) 

該機構出錯「該字段是必填的」。

  • 我試圖反序列化保存的對象,但它是類型的發電機,而不是類型模型實例因此得到了錯誤'generator' object has no attribute 'id'DeserializedObject' object has no attribute 'id'和當試圖得到id屬性。
  • 什麼是最好的方式來檢索和存儲研究所模式實例只有一次,並使用它的eveytime作爲外鍵沒有擊中數據庫?

    +1

    您基本上想要在提取學生模型時獲取學院模型。這可以使用Django的'select_related'。看看這個鏈接:https://stackoverflow.com/questions/31237042/whats-the-difference-between-select-related-and-prefetch-related-in-django-orm –

    回答

    0

    這會有所幫助。

    Models.objects.filter().select_related('foreign_key1','foreign_key2') 
    
    相關問題