2011-11-07 2 views
3

SqlLite3를 Django의 DB 백엔드로 사용할 때 SqLite의 외래 키 지원을 사용하고 싶습니다.Django - SqLite3 백엔드에서 외래 키를 사용하는 방법

PRAGMA foreign_keys = ON; 

이 지원은 기본적으로 비활성화되어, 대부분의 DB를 따라 테스트를 실행하는 동안 바람직 할 것이다 : 는 http://www.sqlite.org/foreignkeys.html에 따르면, 다음을 실행하여 외래 키 지원을 활성화 할 수 있습니다. Django 테스트 프레임 워크를 사용하는 동안이 기능을 제어하는 ​​방법은 무엇입니까? setUp/tearDown 메소드에서 백엔드 관련 명령을 보낼 수 있습니까? 연결 설정 ('DATABASE =' 설정)에서이 옵션을 전체적으로 지정 하시겠습니까?

+3

이 대답은 당신이 원하는 것 같다 : 대답은 정확하게 그 http://stackoverflow.com/questions/6745763/enable-integrity-checking-with-sqlite-in-django/6835016#6835016 – Lycha

+0

@Lycha I 찾고 있었어. 나는 기존의 질문을 더 잘 조사해야했다. 그 답변을 내 질문에 어떻게 연결합니까? –

답변

0

여기에서 부분적으로 대답합니다 : https://stackoverflow.com/a/6843142/552671.

앱에서 활성화 할 수 있습니다 (일반적으로 myapp/apps.py).

from django.db.backends.signals import connection_created 

def activate_foreign_keys(sender, connection, **kwargs): 
    """Enable integrity constraint with sqlite.""" 
    if connection.vendor == 'sqlite': 
     cursor = connection.cursor() 
     cursor.execute('PRAGMA foreign_keys = ON;') 

class MyAppConfig(AppConfig): 
    def ready(self): 
     connection_created.connect(activate_foreign_keys) 

당신은뿐만 아니라 MyAppConfig를 구성 myapp/__init__.pydefault_app_config = 'myapp.apps.PanelConfig'를 작성해야합니다.

참고 : 외부 키는 테스트뿐만 아니라 일반적으로 SQLite에도 적용됩니다. 나는 그것이 당신이 원하는 것이라고 생각합니다.

관련 문제