2011-11-29 3 views
26

Django의 dumpdata 관리 명령에서 출력하는 레코드를 선택적으로 필터링 할 수 있습니까? 나는 각각 수백만 개의 행을 가진 몇 가지 모델을 가지고 있으며 특정 기준에 맞는 하나의 모델에 레코드를 덤프하고 해당 레코드를 참조하는 모든 외부 키 링크 된 레코드 만 덤프하려고합니다.Django 선택적 덤프 데이터

이 사용 사례를 고려하십시오. 내 사용자 모델에 수백만 개의 레코드가있는 프로덕션 데이터베이스가 있다고 가정 해보십시오. 다른 모델 (로그, 트랜잭션, 구매, 책갈피 등)이 모두 User 모델을 참조합니다. 내 장고 앱 개발을하고 싶습니다. 현실적인 데이터를 사용하여 테스트하고 싶습니다. 그러나 프로덕션 데이터베이스는 엄청납니다. 전체적으로 스냅 샷을 찍은 다음 로컬로로드 할 수는 없습니다. 그래서 이상적으로, 나는 dumpdata를 사용하여 50 개의 임의의 사용자 레코드와 모든 관련 레코드를 JSON에 덤프하고이를 사용하여 개발 데이터베이스를 채우고 싶습니다.

쉬운 방법이 있나요?

+1

좋은 질문입니다. 그리고이 테스트 데이터를 공개하려는 경우 비밀번호 등의 일부 필드를 제거하려는 경우도 있습니다. – Mitar

답변

16

나는 django-fixture-magic을 (를) 살펴볼 가치가 있다고 생각합니다.

Scrubbing your Django database에 몇 가지 추가 배경 정보가 있습니다.

+0

이 코드를 약간 조정해야했지만, 그다지 비효율적이지는 않습니다. 그러나 이것은 일반적으로 저에게 효과적입니다. – Cerin

+0

그래, 나도 그래 : https://github.com/davedash/django-fixture-magic/issues/45 – daigorocub

3

이것은 내 질문에 대한 간단한 대답은 아니지만 Django에 내장 된 natural keys feature에 대한 재미있는 문서를 찾았습니다. 기본 키없이 직렬화 된 레코드를 표시 할 수 있습니다. 불행하게도, 이것은 덤프 데이터에 완전히 통합 된 것처럼 보이지 않으며 자연 키를 완전히 사용하기 위해 오래된 outstanding ticket이 있습니다.

serializers.serialize() 함수를 사용하면 특정 모델 인스턴스의 임의 목록을 직렬화 할 수 있습니다.

아마도 모든 모델에서 natural_key() 메서드를 구현 한 다음 serializers.serialize ([Users.objects.filter (criteria)])를 호출하면 원하는 결과를 얻을 수있을 것입니다. 모든 FK 참조를 크롤링하는 함수를 작성하고 serialize()에 전달 된 객체 목록에 이들 함수를 포함해야 할 수도 있습니다.

5

이 조각은 (는 관계를 다음과 그들을 직렬화) 도움이 될 수 있습니다

http://djangosnippets.org/snippets/918/

또한 해당 관리 명령을 사용하여 기본 관리자를 오버라이드 (override) 중 모델 사용자 정의 반환하고자 할 수 querysets.

+1

위의 발췌 문장의 고정/업데이트 된 포크 : https://djangosnippets.org/snippets/10506/ – tutuDajuju

관련 문제