2013-05-30 29 views
6

Tôi đang cố gắng làm manage.py loaddata myfixture.json để cố ý ghi đè hàng loạt một số bản ghi trong cơ sở dữ liệu của mình. Tuy nhiên, nó cho tôi lỗi:Làm thế nào để ngăn chặn đồ đạc Django xung đột với dữ liệu hiện có

IntegrityError: Problem installing fixture 'myfixture.json': Could not load myapp.Person(pk=1): (1062, "Duplicate entry 'Bob' for key 'name'") 

Tôi nghĩ hành vi của loaddata là ghi đè lên các bản ghi nếu khóa chính khớp với bản ghi hiện có? Tôi có sai, hay điều này đã thay đổi ở Django 1.5? Tôi làm cách nào để ghi đè lên?

+0

bạn có chắc chắn các kết quả khớp chính không? bạn có thể đăng một phần cho Bob từ myfixture.json không? bạn có chắc Bob trong db có pk = 1 không? – fsw

+1

Bạn đã thử tạo vật cố định bằng các phím tự nhiên (dumpdata - tự nhiên) chưa? – DimmuR

Trả lời

4

Tôi tìm thấy một cách để sửa đổi lệnh loaddata của Django để phân tích cú pháp các khóa tự nhiên trong khi tải, và tránh tải lại các bản sao. Lệnh sửa đổi được xuất bản here. Sự khác biệt duy nhất giữa loaddata chính thức là các dòng 189-201.

1

Có thể nếu bạn tạo lệnh và gọi các sửa chữa từ lệnh đó, bạn có thể xử lý tình huống.

Trong đồ thị ý kiến ​​của tôi là dành cho dữ liệu tĩnh.

+0

điều này phải là một bình luận. – NathanOliver

Các vấn đề liên quan