2017-02-03 1 views
0

j'obtiens l'erreur de suivi avec djangoerreur de clé en double sur le champ de clé primaire

(1062, « entrée en double « 2 » pour la touche 'BUILDING_ID »)

Voici ce que le modèle ressemble

class BuildingProgressComments(models.Model): 

    user = models.ForeignKey(User) 
    building = models.OneToOneField('Building') 
    date_created = models.DateTimeField(auto_now_add=True) 
    comment = models.TextField(blank=True, null=True) 

    class Meta: 
     verbose_name='Building progress notes' 
    def __unicode__(self): 
     return unicode(self.building) 

Je suis en train d'ajouter plusieurs entrées pour un seul bâtiment et le domaine de la construction n'est pas une clé primaire, alors pourquoi wont ce travail?

Merci à l'avance

+0

Lorsque vous obtenez cette erreur? –

+0

Lorsque j'essaie d'insérer un nouvel enregistrement avec le même bâtiment –

+0

le problème à cause de votre OneToOneField .pour changer le champ en clé de foriegn –

Répondre

2

L'erreur est due au fait que vous utilisez un « OneToOneField » qui ne vous permettra pas de créer des entrées multiples pour une « BUILDING_ID ».

Check out - Django Documentation - OneToOne fields

Vous voulez utiliser un champ « ForeignKey » pour créer des entrées multiples avec le même « BUILDING_ID » comme vous avez utilisé sur le champ « utilisateur ».

Voilà comment le résultat:

class BuildingProgressComments(models.Model): 

    user = models.ForeignKey(User) 
    building = models.ForeignKey('Building') 
    date_created = models.DateTimeField(auto_now_add=True) 
    comment = models.TextField(blank=True, null=True) 

    class Meta: 
     verbose_name='Building progress notes' 
    def __unicode__(self): 
     return unicode(self.building) 
+1

Bien que soyez prudent, par Django 2.0, vous devrez spécifier l'argument 'on_delete' à votre' ForeignKey'. –

+0

Merci cela fonctionne maintenant, j'aurais dû savoir que cela aurait été quelque chose de simple. +1 –

0

Vous essayez d'insérer plusieurs entrées dans un OneToOneField. Comme son nom l'indique, vous ne pouvez avoir qu'une seule entrée pour ce type de champ. Utilisez plutôt un ForeignKey.

+0

Merci pour la réponse, ça marche maintenant –

0

Essayez ceci: Pour changer votre code:

De

building = models.OneToOneField('Building') 

Pour

building = models.ForeignKey('Building') 

helful Conseils: pour en savoir plus cliquer ici OneToOneField