2011-11-29 4 views
26

Có thể lọc có chọn lọc các bản ghi kết quả đầu ra lệnh quản lý kết xuất của Django không? Tôi có một vài mô hình, mỗi mô hình có hàng triệu hàng và tôi chỉ muốn kết xuất các bản ghi trong một mô hình phù hợp với một tiêu chí cụ thể, cũng như tất cả hồ sơ được liên kết ngoài nước tham chiếu đến bất kỳ bản ghi nào.Django Selective Dumpdata

Hãy xem xét trường hợp sử dụng này. Giả sử tôi có cơ sở dữ liệu sản xuất trong đó mô hình Người dùng của tôi có hàng triệu bản ghi. Tôi có một số mô hình khác (Đăng nhập, Giao dịch, Mua, Dấu trang, v.v.) tất cả tham chiếu đến mô hình Người dùng. Tôi muốn phát triển ứng dụng Django của mình và tôi muốn thử nghiệm bằng dữ liệu thực tế. Tuy nhiên, cơ sở dữ liệu sản xuất của tôi là rất lớn, tôi thực tế không thể chụp nhanh toàn bộ và tải nó cục bộ. Vì vậy, lý tưởng, tôi muốn sử dụng dumpdata để kết xuất 50 bản ghi User ngẫu nhiên, và tất cả các bản ghi liên quan đến JSON, và sử dụng nó để điền một cơ sở dữ liệu phát triển.

Có cách nào dễ dàng để thực hiện việc này không?

+1

Câu hỏi hay. Và đôi khi bạn cũng muốn loại bỏ một số trường (như mật khẩu và vân vân) nếu bạn muốn công khai dữ liệu thử nghiệm này. – Mitar

Trả lời

16

Tôi nghĩ rằng django-fixture-magic có thể đáng xem.

Bạn sẽ tìm thấy một số thông tin cơ bản bổ sung trong Scrubbing your Django database.

+0

Tôi đã phải tinh chỉnh mã này một chút, và thậm chí sau đó nó là một chút không hiệu quả, nhưng điều này thường làm việc cho tôi. – Cerin

+0

vâng, tôi cũng vậy: https://github.com/davedash/django-fixture-magic/issues/45 – daigorocub

3

Đây không phải là câu trả lời đơn giản cho câu hỏi của tôi, nhưng tôi đã tìm thấy một số tài liệu thú vị về tích hợp sẵn của Django natural keys feature, cho phép biểu diễn các bản ghi được tuần tự hóa mà không có khóa chính. Thật không may, nó không giống như thế này là hoàn toàn tích hợp vào dumpdata, và có một tuổi outstanding ticket để hoàn toàn dựa vào các phím tự nhiên.

Dường như hàm serializers.serialize() cho phép tuần tự hóa danh sách tùy ý của các cá thể mô hình cụ thể.

Có lẽ, nếu tôi đã triển khai phương thức natural_key() trên tất cả các mô hình của mình, và sau đó được gọi là serializers.serialize ([Users.objects.filter (criteria)]), nó sẽ đến gần để hoàn thành những gì tôi muốn. Tôi có thể phải viết một hàm để thu thập thông tin tất cả các tham chiếu FK, và bao gồm các hàm trong danh sách các đối tượng được truyền tới serialize().

5

đoạn này có thể hữu ích cho bạn (nó sau mối quan hệ và sắp xếp chúng):

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

Bạn có thể sử dụng cũng là lệnh quản lý và ghi đè lên các nhà quản lý mặc định cho bất cứ mô hình bạn muốn quay trở lại tùy chỉnh querysets.

+1

ngã ba cố định/cập nhật của đoạn mã trên: https://djangosnippets.org/snippets/10506/ – tutuDajuju