2010-08-20 35 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