2011-06-19 10 views
0

je Nouvelles et page modèles et Nouvelles a deux champs faisant référence à la page :ManyToManyField IntegrityError dans Django - pourquoi?

chapter = models.ForeignKey('pages.Page', 
    verbose_name='Main chapter', 
    limit_choices_to={'type__in':['news','speech']}, 
    related_name='news' 
) 

add_chapters = models.ManyToManyField('pages.Page', blank=True, null=True, 
     verbose_name='Show also on', 
     limit_choices_to={'allow_add_news':True}, 
     related_name="added_news" 
) 

Le problème est que si je suis en train de sauver Nouvelles de django admin (avec quelques pages sélectionnées pour add_chapters) - Je reçois le

IntegrityError (1452, 'Impossible d'ajouter ou de mettre à jour une ligne enfant: une clé étrangère n'échoue pas (site. news_news_add_chapters, CONTRAINTE news_id_refs_id_479506ad FOREIGN KEY (news_id) RÉFÉRENCES news_news (id)) ')

Quel est le problème?

Répondre

0

Cela fonctionne bien pour moi avec Django 1.2 et sqlite et mysql. Je pense que ton schéma de base de données est faux. Essayez-le sur une base de données fraîche et vérifiez si cela fonctionne.

(Vérifiez votre code - gardez à l'esprit que type est un python built_in. Avez-vous utilisé type au lieu de self.type quelque part?).

Le code I utilisé:

# models.py 
class Page(models.Model): 
    name = models.CharField(max_length=128) 
    type = models.CharField(max_length=128, default="news") 
    allow_add_news = models.BooleanField(default=True) 

class News(models.Model): 
    name = models.CharField(max_length=128) 
    chapter = models.ForeignKey(Page, 
    verbose_name='Main chapter', 
    limit_choices_to={'type__in':['news','speech']}, 
    related_name='news' 
    ) 

    add_chapters = models.ManyToManyField(Page, blank=True, null=True, 
      verbose_name='Show also on', 
      limit_choices_to={'allow_add_news':True}, 
      related_name="added_news" 
    )