2014-04-03 9 views
5

Potrzebuję użyć jednego modelu w kontekście 2 klas administracyjnych. To jest mój model:dwie klasy administracyjne dla jednego modelu django

ITEM_STATUSES = (
('pending', _('Waiting approval')), 
('approved', _('Approved')), 
('declined', _('Declined')) 
) 

class Item(models.Model): 
title = models.CharField(max_length=64) 
description = models.TextField(blank=True) 
... 
status = models.CharField(max_length=32, choices=ITEM_STATUSES) 
... 

I chcę go użyć dwa razy. Po pierwsze, chcę, aby pokazać wszystkie modele, takie jak:

class ItemAdmin(admin.ModelAdmin): 
    pass 

admin.site.register(Item, ItemAdmin) 

a także, chcę nową stronę, gdzie zostaną pokazane modele ze statusem = „oczekujące”, tak:

class ItemAdminPending(admin.ModelAdmin): 
def queryset(self, request): 
    qs = super(ItemAdminPending, self).queryset(request) 
    return qs.filter(status='pending') 

admin.site.register(Item, ItemAdminPending) 

Ale oczywiście pojawia się błąd: AlreadyRegistered: model Pozycja jest już zarejestrowana

Jakieś sugestie? Mam nadzieję, że otrzymam pomoc.

Odpowiedz

5

Bardzo blisko! Co chcesz jest dodanie proxy model w models.py:

class ItemPending(Item): 
    class Meta: 
     proxy = True 

A potem zarejestrować drugą ModelAdmin tak:

admin.site.register(ItemPending, ItemAdminPending) 
Powiązane problemy