2013-02-09 36 views
6

Tôi đang cố gắng để tìm một cách để lọc các queryset quản trị cho các đối tượng trang dựa trên người sử dụng được cung cấp, những gì tôi đã xem xét (mã giả):Tùy chỉnh admin Trang feincms dựa trên người dùng

from feincms... Page 

class MyPageAdmin(PageAdmin): 
    def __init__(self, *args, **kwargs): 
     'monkey business' 
     super(MyPageAdmin, self).__init__(*args, **kwargs) 

admin.site.unregister(Page) 
admin.site.register(Page, MyPageAdmin) 

Điều này sẽ không hoạt động vì feincms kiểm tra cho một trường hợp django hoàn toàn tải. Một giải pháp tiết có lẽ sẽ không nạp module trang ở tất cả, và một trong hai ghi đè lên các đối tượng mô hình trang hoặc admin, ví dụ:

from feincms... PageAdmin 

class MyPage(Page): 
    objects = CustomManager() 

admin.site.register(MyPage, PageAdmin) 

Các tài liệu khẳng định nó có thể setup your own page module theo một cách tương tự, nhưng có vẻ như rất nhiều cấu hình cho một yêu cầu đơn giản.

Có cách nào dễ dàng hơn để ghi đè truy vấn quản trị viên hoặc quản trị viên mô hình cho mô-đun feincms không?

+0

Không được ghi đè [phương pháp truy vấn] (http://stackoverflow.com/a/1659129/630877) của tác phẩm chuẩn 'PageAdmin'? – arie

+0

@arie, vâng nhưng không theo cách thông thường, tôi chỉ tìm ra cách vá chúng một cách chính xác. –

Trả lời

6

FeinCMS v1.7 cũng cho phép bạn thiết lập FEINCMS_USE_PAGE_ADMIN=False trong cài đặt Django của bạn.

Sau đó, chỉ cần phân lớp PageAdmin như bình thường, và tự đăng ký quản trị viên mẫu với chính mô hình đó.

Bạn cũng nên bắt đầu nhập PageAdmin từ feincms.module.page.modeladmins nếu bạn đang sử dụng v1.7.

3

Bí quyết ở đây là bạn không thể hủy đăng ký các mô-đun feincms vì một số phép thuật được thực hiện. Thay vì đăng ký đối tượng feincms trang của riêng bạn, bạn có thể vá các phương pháp như thế này:

from django.conf import settings 
from feincms.module.page.models import PageAdmin 

def queryset(self, request): 
    qs = super(PageAdmin, self).queryset(request) 
    if request.user.is_superuser: 
     return qs 
    return qs.filter(site__id__exact=settings.SITE_ID) 
PageAdmin.queryset = queryset 
Các vấn đề liên quan