2013-05-17 21 views
0

我在我的應用程序有一個愚蠢的Job模型:正確的方法設計一個工作模型

class Job(models.Model): 
    # working info 
    user = models.ForeignKey(User) 
    company = models.CharField(max_length=100, blank=True) 
    department = models.CharField(max_length=100, blank=True) 
    inaugural_date = models.DateField('inaugural date', blank=True) 
    resignation_date = models.DateField('resignation date', blank=True) 

上述模型正是我在我的應用程序,這種模式是用來讓用戶得到他們的大學,僅此而已。

它的工作原理,但我認爲必須有一個更好的方式來設計這個模型,因爲假設我要得到相同的公司,同一部門內的所有用戶的時間同一時期,它不是那麼容易的。

請幫我重建這個模型,任何建議將不勝感激!

回答

0

這應該工作:

User.objects.filter(
    job_set__company__iexact="wwwww", 
    job_set__department__iexact="xxxxx", 
    job_set__inaugural_date__gt=yyyy, 
    job_set__resignation_date__lt=zzzz 
) 

它似乎並不那麼複雜我,如果你想在SQL方面,至少對我來說:)這樣的查詢也不是那麼容易

+0

讓你覺得我的模型是好的?我想我應該重新設計模型 – paynestrike

+0

@chenliang取決於你將要使用它。沒有更多的細節,也許公司和部門應該是他們自己的模型而不是charfields,以及用於描述工作的文本字段?薪水?我真的不知道......這取決於。但在我看來,這個問題就足夠了。 –

+0

謝謝,我編輯的問題,請查看 – paynestrike

0

Depends中您對增長的預測以及您使用的後端有多少。對於關係數據庫(MySQL/Postgres等),我會爲部門和公司創建一個單獨的模型,併爲他們創建連接表,以便稍後讓我的工作更輕鬆。

+0

你能給我一個例子嗎 – paynestrike

+0

我正在使用msyql – paynestrike

0

您的模型看起來不錯。

即使Django模型不是Anemic,我通常將它看作純粹的數據結構,沒有太多的邏輯。所以我覺得

得到同一公司內的所有用戶,並在時間

同期同一個部門是不應該是你的模型,這也意味着關心的問題邏輯,它應該不會影響你的模型設計太多恕我直言。

模型應保持簡單和薄,以便它可以採用和適應不同種類的邏輯。如果你試圖讓你的模型結構適合特定的邏輯,你很容易發現自己與充氣模型糾纏在一起。

順便說一句,對於複雜的查詢,你可以回退到Raw SQL

+0

我想如果我更好地設計我的模型,我的代碼在查詢邏輯應該非常簡單,並且可以很好地擴展,即使我知道我真的不應該太在意比例尺,特別是在一開始,但爲了學習,我非常喜歡更好地構建我的模型!兩次中文英文會話,有趣! – paynestrike

+0

如果你知道**更好的**是什麼,按照它。如果你不知道或不太清楚,我的答案可能是考慮的因素之一;-)。 –

+0

謝謝,我會的。 – paynestrike