2011-06-29 10 views
0

Bonjour, Je veux faire un changement sur ma models.py.Django: question modèle

J'ai deux tables. Client et note. Ce que je veux faire est d'avoir un champ de note dans la table des clients qui devrait avoir une relation un-un avec la table Note. Cependant, la note devra stocker un utilisateur, un client et une date et heure. J'ai donc besoin d'une autre table pour le faire. Mais je veux une relation one-one avec le client et la note.

Un client ne doit pouvoir stocker qu'une seule note. Une note a un utilisateur, datetime, un champ de texte de note et un client (Si j'ai un champ de note dans la table du client, je ne pense pas avoir besoin de cette entrée).

models.py

class Client(models.Model): 
     name = models.CharField(max_length = 40) 
     telephone = models.CharField(max_length = 20) 
     website = models.URLField(verify_exists = False) 
     fax = models.CharField(max_length = 20) 
     email = models.EmailField() 
     is_active = models.BooleanField() 
     def __unicode__(self): 
      return self.name 

    class Note(models.Model): 
     client = models.ForeignKey(Client) 
     datetime = models.DateTimeField(default=datetime.now) 
     user = models.ForeignKey(User) 
     note = models.TextField() 

     def __unicode__(self): 
      return unicode(self.user) 

Répondre

0

Justinas est juste. Vous devez ajouter un champ de note à votre modèle Client, ce qui rend le FK de votre modèle Note obsolète. Quelque chose comme ceci devrait vous aider à démarrer:

class Note(models.Model): 
    datetime = models.DateTimeField(default=datetime.now) 
    user = models.ForeignKey(User) 
    note = models.TextField() 

    def __unicode__(self): 
     return unicode(self.user) 

class Client(models.Model): 
    name = models.CharField(max_length = 40) 
    telephone = models.CharField(max_length = 20) 
    website = models.URLField(verify_exists = False) 
    fax = models.CharField(max_length = 20) 
    email = models.EmailField() 
    is_active = models.BooleanField() 
    note = models.OneToOneField(Note) 

    def __unicode__(self): 
     return self.name 
+0

Oui c'est ce que je cherche merci. Une question de plus Dans mysql, si vous voulez ajouter l'entrée 'note = models.OneToOneField (Note)' dans mysql, comment créer un champ un-à-un en utilisant la commande 'alter table'? – Shehzad009

+0

Vous devriez utiliser 'syncdb' ou' South' pour cela. Ne jouez pas avec les tables vous-même. – Bjorn

1

Je ne comprends pas bien la question, mais je suppose que vous avez besoin du OneToOneField

+0

Je veux une entrée de note dans la table client qui peut correspondre à la table de note. – Shehzad009

+0

@ Shehzad009: S'il vous plaît ** mettre à jour ** la question avec des informations supplémentaires. –