2010-08-20 69 views
3

我期望爲屬於特定國家/地區的實體提供超級用戶訪問。基於國家的超級用戶訪問

例如。瑞典SU只能管理瑞典實體等......

但是,我是django(接管舊系統)的新手,我需要一條生命線。

我希望能夠指定關係表。

我已經添加了用戶配置文件,並與我有一個名爲super_user_country_link = models.ForeignKey(SuperUserToCountry,空白=真,空=真)一個新的領域

,然後一個新的類下

class SuperUserToCountry(models.Model): 
    user = models.ForeignKey(User) 
    country = models.ForeignKey(Country) 

我打算運行腳本,然後爲每個超級用戶添加一個條目,併爲他們提供一個鏈接到國家0(即沒有國家=>總su訪問)。 然後我就可以刪除這些條目,因爲我開始把國家特定的條目 所以後來我可以打電話(使用的房屋爲例):

if user.is_superuser: 
    if user.get_profile().super_user_county_link.country == 0: 
     #show house detail... 
    elsif user.get_profile().super_user_county_link.country == 0 
     #show house detail... 
    else 
     pass 

所以看着它,這應該意味着我可以列出多個國家針對單個用戶,對嗎?也許我過度思考它,但這看起來正確嗎?

我從PHP背景的,所以我只是在如何正確的,這是略低可疑......

+0

你應該試着讓你的問題更容易理解。 – 2010-08-20 17:46:38

+0

你的第二個代碼段中的if和first elsif條件是相同的。這是故意的嗎? – 2010-08-20 17:50:09

回答

1

糾正我,如果我錯了。在我看來,您正試圖建立UserProfileCountry之間的多對多關係。如果是這樣,最好的方法是使用ManyToManyField。事情是這樣的:

class UserProfile(models.Model): 
    countries = models.ManyToManyField(Country) 

您可以在該離開它,而不需要單獨的模型(SuperUserToCountry),只要你不存儲任何其他信息作爲這種關係的一部分。如果您計劃存儲其他信息,則有way for that too

這裏不需要條件blank = Truenull = True。如果沒有國家與用戶配置文件相關聯,那麼這些國家將返回一個空的丟失(即an_instance.countries.all()將爲空)。

當你開始加入的國家,你可以做這樣的事情:

profile = User.get_profile() 
denmark = Country.objects.get(name = 'Denmark') 
russia = Country.objects.get(name = 'Russia') 

if denmark in profile.countries.all(): 
    print "Something is rotten in the state of Denmark" 
elsif russia in profile.countries.all(): 
    print "In Soviet Russia, profiles have countries!" 

上述條件最可能被更準確地表達根據您的具體需要。順便說一句,你會增加一個國家的用戶的配置文件是這樣的:

profile = User.get_profile() 
denmark = Country.objects.get(name = 'Denmark') 
profile.countries.add(denmark) 
+0

完美,謝謝! – 2010-08-24 14:54:38