2012-07-04 39 views
5

Tôi đang tạo đồ đạc cho các quyền trong Django. Tôi có thể tải chúng theo cách cần thiết. Tuy nhiên, câu hỏi của tôi là ... tôi muốn tải một vật cố định cho bảng auth_group_permissions, tôi cần phải chỉ định group_idpermission_id, đồ đạc không may không phải là cách tốt nhất để xử lý việc này. Có cách nào dễ dàng hơn để làm điều này theo chương trình? Để tôi có thể nhận được id cho các giá trị cụ thể và yêu cầu chúng được điền vào? Việc này thường được thực hiện như thế nào?Đồ đạc Django cho phép

Trả lời

8

Giải pháp thích hợp là tạo các quyền theo cùng cách thức mà khung công tác thực hiện.

Bạn nên kết nối với tín hiệu post_syncdb được tích hợp trong mô-đun management.py hoặc management/__init__.py và tạo quyền ở đó. Tài liệu nói rằng bất kỳ công việc nào được thực hiện để phản hồi với tín hiệu post_syncdb sẽ không thực hiện bất kỳ thay đổi cơ sở dữ liệu nào, nhưng bạn cũng nên lưu ý rằng chính khung công tác tạo các quyền để phản hồi tín hiệu này.

Vì vậy, tôi khuyên bạn nên xem management module của ứng dụng django.contrib.auth để xem cách thực hiện.

3

Kể từ ít nhất Django> = 1,7, câu trả lời được chấp nhận không còn là câu trả lời đúng do việc giới thiệu "khóa tự nhiên" làm tùy chọn tuần tự hóa.

Bạn có thể đọc thêm về các phím tự nhiên trong Django serialization documentation

Các tài liệu đề cập đến một cách rõ ràng trường hợp sử dụng cho các phím tự nhiên là khi ..

... đối tượng sẽ tự động được tạo ra bởi Django trong cơ sở dữ liệu quá trình đồng bộ hóa, khóa chính của một mối quan hệ nhất định không dễ dự đoán; nó sẽ phụ thuộc vào cách thức và thời điểm di chuyển được thực thi. Điều này đúng cho tất cả các mô hình tự động tạo các đối tượng, đặc biệt là bao gồm quyền, nhóm và người dùng.

Vì vậy, cho câu hỏi cụ thể của bạn, liên quan đến auth_group_permissions, bạn sẽ đổ vật cố của bạn bằng cách sử dụng cú pháp sau:

python manage.py dumpdata auth --natural-foreign --natural-primary -e auth.Permission

Bảng auth_permissions phải được loại trừ một cách rõ ràng với -e cờ như bảng đó là dân cư bởi lệnh migrate và sẽ có dữ liệu trước khi tải đồ đạc.

Lịch thi đấu này sau đó sẽ được tải theo cách tương tự như bất kỳ đồ đạc nào khác

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