장고 "하위 행을 추가하거나 업데이트할 수 없습니다. 외부 키 제약 조건이 실패합니다."
모델이 있습니다.Coupon
, 및 모델Photo
와 함께ForeignKey
다음 중 하나를 선택합니다.
class Photo(models.Model):
coupon = models.ForeignKey(Coupon,
related_name='description_photos')
title = models.CharField(max_length=100)
image = models.ImageField(upload_to='images')
관리자에서 인라인을 설정했기 때문에 관리자 쿠폰에 사진을 추가할 수 있게 되었습니다.
하나를 추가하려고 하면 업로드가 성공하지만 다음 오류와 함께 Django의 디버깅 페이지가 나타납니다.
IntegrityError at /admin/coupon/coupon/321/
(1452, 'Cannot add or update a child row: a foreign key constraint fails (`my_project`.`coupon_photo`, CONSTRAINT `coupon_id_refs_id_90d7f06` FOREIGN KEY (`coupon_id`) REFERENCES `coupon_coupon` (`id`))')
이것은 무엇이며 어떻게 이 문제를 해결할 수 있습니까?
(중요한 것은 MySQL 데이터베이스입니다.)
편집: 데이터셋이 약간 다른Sqlite3 데이터베이스에서 시도했는데 작동했습니다.현재 DB에 데이터가 남아 있지 않을까요?어떻게 찾아서 삭제할 수 있나요?
InnoDB에 있는 테이블도 있고 MyISAM에 있는 테이블도 있고MyISAM으로 모든 것을 변경했고 문제가 해결되었습니다.
DATABASES = {
'default': {
...
'OPTIONS': {
"init_command": "SET foreign_key_checks = 0;",
},
}
}
(공식 문서에 따르면) 이전 버전의 Django에서는 InnoDB 스토리지 엔진을 사용할 때 정방향 참조(데이터베이스에 아직 삽입되지 않은 행과의 관계)가 있는 고정 장치가 로드되지 않았습니다.이는 InnoDB가 트랜잭션이 커밋될 때까지 체크를 미루지 않고 바로 외부 키 제약사항을 체크함으로써 SQL 표준에서 벗어나기 때문입니다.이 문제는 Django 1.4에서 해결되었습니다.
이 문제를 피하기 위해 사용자가 할 수 있는 것은 다음과 같이 설정하는 것입니다.STORAGE_ENGINE
설정을 변경합니다.화이
django > = 1.2의 경우
DATABASES = {
'default': {
...
'STORAGE_ENGINE': 'MyISAM / INNODB / ETC'
}
}
django <= 1.2의 경우
DATABASE_STORAGE_ENGINE = "MyISAM / INNODB / ETC"
이것은 MySQL에만 유효합니다.
이 오류의 원인은 먼저 하위 테이블을 저장한 다음 상위 테이블을 저장하려고 하기 때문일 수 있습니다.
이에 대한 해결책은 을 사용하는 것입니다.
DATABASES = {
'default': {
...
'OPTIONS': {
"init_command": "SET foreign_key_checks = 0;",
},
}
}
2) 데이터베이스 동작 흐름 확인 및 작성parent ---> child
같은 문제가 발생하였습니다.mmrs151의 솔루션은 동작하지만 NB는 다음과 같습니다.Django <= 1.2
(복수의 데이터베이스를 지원하기 전) 설정은 다음과 같습니다.
DATABASE_OPTIONS = {"init_command": "SET foreign_key_checks = 0;"}
Ram Rachum은 문제를 해결하기보다는 해결한 것으로 보입니다.MyISAM은 트랜잭션을 전혀 지원하지 않습니다.
다른 옵션은 MySQL 테이블에서 구속조건을 삭제하는 것입니다.
alter table <TABLE_NAME> drop foreign key <CONTRAINT_NAME>;
언급URL : https://stackoverflow.com/questions/6178816/django-cannot-add-or-update-a-child-row-a-foreign-key-constraint-fails
'programing' 카테고리의 다른 글
VueJS 템플릿에서 동적 이름과 동적 구성 요소를 사용하여 슬롯 목록을 선언하려면 어떻게 해야 합니까? (0) | 2022.10.25 |
---|---|
JavaScript에서 동적 변수 이름 사용 (0) | 2022.10.25 |
PHP를 사용하여 클라이언트 IP 주소 가져오기 (0) | 2022.10.25 |
mysql - 빈 테이블에 존재하지 않는 위치에 선택 항목 삽입 (0) | 2022.10.25 |
C를 사용한 JSON 해석 (0) | 2022.10.25 |