2012-12-17 40 views
1

我需要在Django項目中連接兩個應用程序,但不想將模型從一個導入到另一箇中。保持它們'清潔'將允許我以後分開重複使用它們。應用程序之間的Django關係:如何讓應用程序分開?

在這種特殊情況下,我需要這些獨立應用程序中兩個模型之間的多對多關係。一種解決方案是在主項目應用程序中創建一個模型,以定義兩者的外鍵。這是Django的方式還是有更好的解決方案?

+0

如果一個應用程序需要從另一個應用程序導入模塊,那麼其中沒有整潔(因爲它們是從屬的)。 –

回答

2

也許您正在尋找一種Mediator Pattern。如果你的應用程序不需要彼此瞭解,一種方法可以編寫另一個可以同時瞭解這兩者的應用程序。

+0

是的,當我說我可以在主項目應用程序中放置一個模型時,這就是我的想法。但我認爲我找到了更好,更多的Django esque:[代理模型繼承](https://docs.djangoproject.com/en/dev/topics/db/models/#proxy-models)。這樣我就可以保持基本應用程序清除任何項目相關的依賴關係,從而可重用,並將它們代入帶有代理模型的「派生」應用程序。當然,我將需要在設置/ INSTALLED_APPS中將基礎應用與派生應用交換。 – Sven

0

django-profiles,django-sorl,django-都可以作爲'多對一'類型的關係。當你選擇使用這些插件/應用程序(和其他)時,你最終會讓你的設計應用程序依賴於它們的存在。

選項1: 考慮到上面的情況......製作一個您打算設計的通用應用程序足夠通用,從而依賴只有一種方式(因此,其他應用程序將依賴於它而不是其他方式)。這是大多數Django應用程序已經做的。

選項2: 如果您的每個應用程序彼此之間共享依賴關係,那麼您可能會讓自己的生活變得非常容易,只需將它保持在同一個應用程序/插件中即可。

+0

謝謝 - 是的,我不介意如果我的項目特定的應用程序骯髒,只是通用的應用程序應該保持乾淨。我測試了代理機制,它完全符合我的需求,即我可以通過依賴其他應用程序的部分來擴展我的通用應用程序。這就像應用程序的繼承,而不會污染底層數據。 – Sven

相關問題