2009-04-11 37 views
8

Tôi đang cố gắng sử dụng SQLAlchemy để triển khai mô hình nhóm người dùng cơ bản, nơi người dùng có thể có nhiều nhóm và nhóm có thể có nhiều người dùng.SQLAlchemy xoá nhiều trẻ mồ côi

Khi một nhóm trống, tôi muốn nhóm bị xóa, (cùng với những thứ khác liên quan đến nhóm. May mắn thay, thác của SQLAlchemy hoạt động tốt với những tình huống đơn giản hơn).

Vấn đề là thác tầng = 'tất cả, xóa-trẻ mồ côi' không thực hiện chính xác những gì tôi muốn; thay vì xóa nhóm khi nhóm trở nên trống, nhóm sẽ xóa nhóm khi mọi thành viên rời khỏi nhóm.

Thêm trình kích hoạt vào cơ sở dữ liệu hoạt động tốt khi xóa nhóm khi nó trống, ngoại trừ trình kích hoạt dường như bỏ qua xử lý thác của SQLAlchemy để mọi thứ liên quan đến nhóm không bị xóa.

Cách tốt nhất để xóa nhóm khi tất cả các thành viên của nhóm đó rời khỏi và xóa bỏ chuỗi này với các thực thể có liên quan.

Tôi hiểu rằng tôi có thể thực hiện việc này theo cách thủ công bằng cách tìm mọi địa điểm trong mã của tôi, nơi người dùng có thể rời khỏi nhóm và sau đó làm điều tương tự như trình kích hoạt, tôi e rằng tôi sẽ bỏ lỡ các địa điểm trong mã và tôi lười biếng).

+0

Tôi nghĩ có thể hơi phức tạp khi trả lời câu hỏi này mà không cần thêm chi tiết về mã của bạn (bạn đã thiết lập mối quan hệ nhiều-nhiều như thế nào, bạn đã đặt những đứa trẻ mồ côi, v.v ...) là lược đồ, v.v. –

+0

Tôi đã thử xóa trẻ mồ côi trên backref và quan hệ bình thường(). Mối quan hệ cơ bản là người lập bản đồ (Người dùng, người dùng, thuộc tính = {'nhóm': quan hệ = quan hệ (Nhóm, phụ = users_groups, backref = backref ('người dùng'))}) –

Trả lời

3

Cách tôi thường xử lý việc này là có chức năng trên người dùng hoặc nhóm của bạn được gọi là leave_group. Khi bạn muốn người dùng rời khỏi nhóm, bạn gọi hàm đó và bạn có thể thêm bất kỳ tác dụng phụ nào bạn muốn vào đó. Về lâu dài, điều này giúp dễ dàng thêm nhiều tác dụng phụ hơn và nhiều hơn nữa. (Ví dụ: khi bạn muốn kiểm tra xem ai đó có được phép rời khỏi nhóm) không.

3

Tôi nghĩ bạn muốn cascade='save, update, merge, expunge, refresh, delete-orphan'. Điều này sẽ ngăn chặn các "xóa" cascade (mà bạn nhận được từ "tất cả") nhưng duy trì "xóa-mồ côi", đó là những gì bạn đang tìm kiếm, tôi nghĩ (xóa khi không có cha mẹ nhiều hơn).

+1

Trong SA 0.6: 'The 'delete- tùy chọn xếp chồng của trẻ mồ côi yêu cầu 'xóa' – ThiefMaster

0

Bạn có thể đăng mẫu thiết lập bảng và bản đồ của mình không? Nó có thể được dễ dàng hơn để phát hiện những gì đang xảy ra.

Nếu không thấy mã khó nói, nhưng có thể có điều gì đó sai trái theo hướng của mối quan hệ?

2

Tôi đã gặp sự cố tương tự khoảng 3 tháng trước, tôi có mối quan hệ Đăng/Thẻ và muốn xóa Thẻ không sử dụng. Tôi hỏi trên irc và tác giả của SA nói với tôi rằng thác trên quan hệ nhiều-nhiều không được hỗ trợ, mà loại có ý nghĩa vì không có "cha mẹ" trong nhiều-nhiều.

Nhưng việc mở rộng SA thật dễ dàng, bạn có thể sử dụng AttributeExtension để kiểm tra xem nhóm có bị trống khi bị xóa khỏi Người dùng và xóa nó khỏi đó hay không.

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