2010-08-20 5 views
3

Je cherche à fournir un accès super-utilisateur à des entités appartenant à un pays spécifique.Accès super utilisateur par pays

par ex. SU suédois peut seulement administrer des entités suédoises, etc ...

Cependant, je suis nouveau à django (en prenant en charge un ancien système) et j'ai besoin d'une ligne de vie.

J'aimerais pouvoir spécifier une table de relations.

Je l'ai déjà ajouté un userprofile et que j'ai un nouveau champ appelé super_user_country_link = models.ForeignKey (SuperUserToCountry, vide = True, null = True)

puis sous une nouvelle classe

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

Je prévois d'exécuter le script puis d'ajouter une entrée pour chaque superutilisateur et de lui donner un lien vers le pays 0 (c'est-à-dire, pas de pays => total su accès). Je peux alors supprimer ces entrées que je commence à mettre des entrées spécifiques à chaque pays dans Je peux donc plus tard appeler (à l'aide des maisons comme exemple):

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 

recherche donc à elle, cela devrait signifier que je peux énumérer plusieurs pays contre un seul utilisateur, non? Peut-être que je suis trop penser, mais cela semble-t-il correct?

Je viens d'un milieu de php, donc je suis juste slighty douteux sur la façon correcte c'est ...

+0

Vous devriez essayer de rendre votre question plus compréhensible. –

+0

Les conditions 'if' et' elsif' premières dans votre deuxième extrait de code sont les mêmes. Est-ce intentionnel? –

Répondre

1

-moi si je me trompe. Il me semble que vous essayez d'établir une relation de plusieurs à plusieurs entre UserProfile et Country. Si c'est le cas, la meilleure façon d'y arriver serait d'utiliser un ManyToManyField. Quelque chose comme ceci:

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

Vous pouvez le laisser à ce sans nécessiter un modèle distinct (SuperUserToCountry) aussi longtemps que vous n'êtes pas stocker toute autre information dans le cadre de cette relation. Si vous envisagez de stocker d'autres informations, il existe un way for that too. Les conditions blank = True et null = True ne sont pas nécessaires ici. Si aucun pays n'est associé à un profil d'utilisateur, les pays renverront une page vide (c'est-à-dire an_instance.countries.all() sera vide).

Lorsque vous commencez à ajouter des pays que vous pouvez faire quelque chose comme ceci:

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!" 

Les conditions ci-dessus peuvent très probablement être exprimé plus précisément en fonction de vos besoins spécifiques. Incidemment, vous allez ajouter un pays à un profil d'utilisateur comme celui-ci:

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

Parfait, merci! –

Questions connexes