ManyToManyField IntegrityError в Django - почему? - PullRequest
0 голосов
/ 19 июня 2011

У меня есть Новости и Страница моделей, а Новости имеет два поля, ссылающихся на Страница :

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

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

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

Что не так?

1 Ответ

0 голосов
/ 20 июня 2011

У меня это нормально работает с Django 1.2 и sqlite и mysql.Я думаю, что ваша схема БД неверна.Попробуйте его на новой базе данных и проверьте, работает ли он.

(Проверьте свой код - имейте в виду, что 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"
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...