2012-11-18 251 views
0

有沒有辦法通過foreignObject來過濾django /可以通過外鍵過濾?

看到我的代碼,我想修復。

模型部分:

class UserProfile: 
    blahblah 

class FreeTime : 
    owner = models.ForeignKey(UserProfile) 
    fromTime=models.DateField() 
    toTime=models.DateField() 

現在,編碼部分

givenTime = date(2012,11,11) 


freeTimes = FreeTime.objects.filter(fromTime__lte=givenTime, toTime__gte=givenTime) 

users = [] 
for freeTime in freeTimes: 
    users.append(freeTime.owner) 

//todo : remove duplicated object of user 

這是完全的代碼浪費。

正如你所看到的,我想要的是,找到在給定時間空閒的用戶。

任何方式來減少代碼?

回答

3

我認爲這應該工作:

User.objects.filter(freetime__fromTime__lte=givenTime, freetime__toTime__gte=givenTime) 

編輯:

由於@calvin程說,你應該FK到用戶:

from django.contrib.auth.models import User 


class FreeTime(models.Model): 
    owner = models.ForeignKey(User) 
    fromTime=models.DateField() 
    toTime=models.DateField() 
+1

是啊。打敗我吧。但是我可以指出,對於他的問題,他正在回到UserProfile類。不是'用戶'。雖然你可能是正確的,但是FK回到User類是一個更好的設計,我會按照你的方式去做。 –

+1

是的。我總是FK auth.models.User。我認爲這是最佳做法。使用Django 1.5,我們不會再遇到這個問題。 – santiagobasulto

+0

有什麼區別嗎?通過user.get_profile()訪問userProfile或通過UserProfile.user訪問用戶。通常有價值的數據在userProfile中,而不是用戶。所以我使用userprofile作爲foreignKey。有什麼不同? –