我希望为属于特定国家/地区的实体提供超级用户访问权限。
例如。瑞典SU只能管理瑞典实体等......
然而,我是django的新手(接管一个旧系统),我需要一条生命线。
我希望能够指定关系表。
我已经添加了一个userprofile,并且我有一个名为super_user_country_link = models.ForeignKey的新字段(SuperUserToCountry,blank = True,null = True)
然后在新课程
下面class SuperUserToCountry(models.Model):
user = models.ForeignKey(User)
country = models.ForeignKey(Country)
我计划运行脚本,然后为每个超级用户添加一个条目,并为它们提供一个指向国家0的链接(即,没有country => su 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 :(得分:1)
如果我错了,请纠正我。在我看来,您正试图在UserProfile
和Country
之间建立多对多的关系。如果是这样,最好的方法是使用ManyToManyField
。像这样:
class UserProfile(models.Model):
countries = models.ManyToManyField(Country)
只要您没有将任何其他信息存储为此关系的一部分,您就可以不需要单独的模型(SuperUserToCountry
)。如果您计划存储其他信息,则有way for that too。
此处不需要条件blank = True
和null = 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)