2011-06-19 1 views
0

У меня есть Новости и страницу моделей и Новости имеет два поля ссылки на Страница:ManyToManyField IntegrityError в Django - почему?

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

Проблема заключается в том, что если я пытаюсь сохранить Новости от Джанго администратора (с некоторыми страницами, выбранными для add_chapters) - я получаю

IntegrityError (1452, «Невозможно добавить или обновить дочернюю строку: внешний ключ сбой завершен (site. news_news_add_chapters, CONSTRAINT news_id_refs_id_479506ad FOREIGN KEY (news_id) Лит news_news (id)))

Что случилось?

ответ

0

Это работает нормально для меня с Django 1.2 и sqlite и mysql. Я думаю, что ваша схема db неверна. Попробуйте на новом db и проверьте, работает ли он.

(Проверьте свой код - имейте в виду, что type - это python built_in. Вы использовали type вместо self.type?).

Код я использовал:

# 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" 
    )