2014-12-07 4 views
3

제한 사용자 정의 관리자로 관리자 list_editable을 사용할 때 이상한 동작이 발생했습니다. 관리자가 목록 변경 사항을 저장하려고 할 때마다 메시지가 나타납니다. 아래 오류를 수정하십시오.Django 관리자 목록 편집

이 오류 메시지를 제거하는 방법에 대한 제안 사항이 있으십니까? 여기

는 최소한의 샘플입니다 :

models.py

from django.db import models 

class RestrictedManager(models.Manager): 
    def get_queryset(self): 
     return super(RestrictedManager, self).get_queryset().none() 


class MyModel(models.Model): 
    on = models.BooleanField() 

    objects = RestrictedManager() 
    all_objects = models.Manager() 

admin.py 당신은 왜이 none() 기본의 검색어를 사용하고, 궁금하면

from django.contrib.admin import ModelAdmin, site 
from models import MyModel 

class MyModelAdmin(ModelAdmin): 
    list_editable = ('on',) 
    list_display = ('id', 'on',) 

    def get_queryset(self, request): 
     return MyModel.all_objects 

site.register(MyModel, MyModelAdmin) 

, 나는하지 않는다. 이 예제를 단순화하기 위해서만 none()을 사용했습니다. 이 문제는 기본 관리자가 필터링 한 모든 개체에서 발생합니다.

답변

1

아직 테스트하지는 않았지만 문제는 기본 관리자를 재정의했기 때문일 수 있습니다. 장고 문서에서

: 사용자 정의 관리자 객체를 사용하는 경우 Default managers

취 (그들이 모델에 정의하고 순서대로) 장고가 처음 나타나는 관리자가 특별한 지위를 가지고 있습니다. Django는 클래스에 정의 된 첫 번째 Manager를 "기본"Manager로 해석하며 Django의 여러 부분 (dumpdata 포함)은 해당 Manager에만 해당 Manager를 사용합니다. 따라서 get_queryset()을 재정의하면 작업 할 객체를 가져올 수없는 상황을 피하기 위해 기본 관리자를 선택하는 데주의해야합니다.

따라서 "UnrestrictedManager"를 먼저 사용하고 사용자 지정 관리자를 두 번째로 사용하면 트릭을 수행해야합니다.

+0

내 접근법이 장고에 의해 권장되지 않는 것 같습니다. 감사! – Yossi

0

간단한 관리자로 프록시 모델을 만들어서이 문제를 해결했습니다.

class UnrestrictedMyModel(MyModel): 
    objects = models.Manager() 

    class Meta: 
     proxy = True 

site.register(UnrestrictedMyModel, MyModelAdmin) 

하지만 여전히 더 나은 해결책을 찾고 있습니다.