2009-12-01 6 views
0

J'ai une simple application Web dans Django pour une application iPhone. Je veux inviter l'utilisateur à consulter notre produit, mais juste une fois. Je ne veux pas montrer à nouveau cette invite.Définir et utiliser des drapeaux sur un modèle de profil utilisateur dans Django

Ainsi, la meilleure façon d'implémenter cela serait d'ajouter une nouvelle entrée dans le modèle de profil utilisateur avec un champ bolean: "reviewed" - puis de définir ce drapeau lorsque l'utilisateur termine l'action?

Je vérifierais alors pour cette entrée dans mon modèle et afficher ou non, l'invite.

Je n'ai pas encore travaillé avec des modèles de base de données, étendu le modèle utilisateur ou enregistré dans des champs de base de données personnalisés, donc toute idée ou tout exemple à ce sujet serait le bienvenu. Je suis un peu nerveux car mon site a des utilisateurs en direct et je ne veux pas casser les tables des utilisateurs.

Répondre

1

Si vous utilisez MySQL ou PostgreSQL, vous pouvez faire quelques ALTER TABLE sans perdre aucune donnée.

Dans Django, il est assez facile d'ajouter un profil pour l'utilisateur. Assurez-vous, pour créer le profil si elle n'existe pas:

try: 
    profile = request.user.get_profile() 
except UserProfile.DoesNotExist: 
    # If DoesNotExists, Create an empty one 
    profile = UserProfile(user=request.user) 
    profile.save() 

Plus d'informations ici:

+0

merci Natim - J'ai en fait déjà un profil (j'utilise une application réutilisable django-basic-profiles), mais je suis confus si je devais ajouter ce champ booléen ici, ailleurs et si c'est le _right_ chose à faire. –

+0

Je voudrais ajouter le booléen ici s'il n'y en a qu'un. Si vous avez besoin d'autres drapeaux à l'avenir, le meilleur moyen est de créer un modèle 'Flag' avec un nom et un ManyToManyField (User). S'il y a un lien entre le drapeau et l'utilisateur, il est vrai et sinon, il est faux. – Natim

+0

Avec cette méthode, cet indicateur sera-t-il appliqué aux utilisateurs actuels du système lorsque je ferai la syncdb, ou devrais-je utiliser quelque chose comme django-evolution pour accomplir cela? –

0

Il y a plusieurs façons de procéder. Je suggère ce qui suit:

Django a un cadre de messagerie, construit par conception pour afficher des messages aux utilisateurs une seule fois lorsque le logiciel les crée. Chaque fois que X est créé/modifié/supprimé, vous pouvez ajouter le message à l'utilisateur via User.message_set.create (message = 'Tout ce que vous voulez'). Cela sera montré à l'utilisateur une fois. Cela dépend des sessions django, que je suppose que vous utilisez étant donné que vous utilisez le modèle utilisateur intégré. Ces messages sont stockés dans auth_message.

HTH

+0

Mais comment pourrais-je ne mettre ce message une fois, et où pourrais-je stocker ce drapeau? –

+2

Je ne pense pas que auth_message soit dans ce but. – Natim

Questions connexes