2012-01-10 3 views
3

최근에 원시 PHP에서 django로 이식되어 기존 레거시 데이터베이스를 통합해야했습니다. inspectdb 명령을 사용하여 데이터베이스에서 모델을 구성하고 모든 것이 잘 작동하고있었습니다.오류 발생 - 자식 행을 추가하거나 업데이트 할 수 없습니다 : django의 레거시 데이터베이스에서 외래 키 제약 조건이 적용되지 않습니다.

최근에 likeset to favorite의 기능을 추가하기로 결정했습니다. 그래서 아래와 같이 새로운 테이블을 추가했습니다.

class SongCollection(models.Model): 
    song_name = models.TextField() 
    song_type = models.CharField(max_length=765) 
    likes = models.IntegerField(default=0) 

    class Meta: 
     db_table = u'songcollection' 


class likeSong(models.Model): 

    user = models.ForeignKey(User) 
    company = models.ForeignKey(SongCollection) 

첫 번째는 내 원래 class이고, 다른 하나는 사용자가 어떤 노래를 좋아했다 저장을위한 것입니다. 내 다른 응용 프로그램에서 같은 정확한 구조를 사용하여 django 완전히 개발하고 그들은 잘 작동하고 있습니다. 그러나 likeSong에 개체를 추가하려고하면 다음 오류가 발생합니다.

Cannot add or update a child row: a foreign key constraint fails 

나는 이것이 Django 오류했지만 그것은 또한이 실패한 경우를 확인하기 위해,뿐만 아니라 MySQL의 명령 행에서이 개체를 추가했습니다. 아무도 실제로 여기서 잘못된 점을 이해하는 데 나를 도울 수 있습니까?

답변

8

을 알려주세요. 이전 테이블은 phpMyAdmin을 사용하여 생성되었으며 테이블의 스토리지 엔진 유형은 MyISAM 이었지만 새 테이블은 내 장고를 만들 때 innodb의 스토리지 유형을가집니다.

결과적으로 두 테이블간에 비 호환성이 발생했고 새로운 테이블에 튜플을 추가 할 때마다 참조 된 테이블에 해당 테이블이 없기 때문에 외래 키 제약 조건이 실패했습니다. 같은 스토리지 엔진.

이전 테이블의 스토리지 엔진을 innodb으로 변경했으며 이제는 정상적으로 작동합니다. 변경하려면이 명령을 사용했습니다.

ALTER TABLE ourquestions ENGINE = innodb 

누군가 도움이 되길 바랍니다.

+0

덕분에 당신은 최고입니다! – Ron

1

이 오류는 다른 테이블과의 관계가있는 데이터베이스의 테이블을 삭제, 업데이트 또는 변경하려는 경우에 발생합니다. 이 경우 기본 테이블 (기본)에서 변경 한 후 두 번째 테이블에서 레코드를 변경해야합니다.

귀하의 데이터베이스 테이블과 관계.

나는 나의 새로운 django 프로젝트에 legacy database을 쏟아했다대로 나는 문제가 무엇인지 알아 낸 나에게 결과

+0

내 'like' 논리는 다음과 같습니다. 사용자가 해당 노래에 대해 like 버튼을 클릭하면 사용자에게 하나, 노래에 하나씩 두 개의 외부 키가있는'likeSong '테이블에 항목이 만들어집니다. 'foreign-key'에 의해 참조 된 테이블을 변경하지 않고 다른 모델에서 똑같은 일을하지만, 기본적으로 레거시 데이터베이스 인이 모델에서는 실패합니다 – Sachin

관련 문제