2009-12-09 7 views
2

특정 모델에 대한 새 항목을 만들면 장고 관리자에 표시되지 않습니다.장고 관리자가 항목을 표시하지 않습니다

기관 모델이 문제의 원인입니다.

# catalog.models 

class Content(models.Model): 

    class Meta: 
     abstract = True 

    BUNDESLAND_CHOICES = (
     ('bw', 'Baden-Württemberg'), 
     ('by', 'Bayern'), 
     ('be', 'Berlin'), 
     ('bb', 'Brandenburg'), 
     ('hb', 'Bremen'), 
     ('hh', 'Hamburg'), 
     ('he', 'Hessen'), 
     ('mv', 'Mecklenburg-Vorpommern'), 
     ('ni', 'Niedersachsen'), 
     ('nw', 'Nordrhein-Westfalen'), 
     ('rp', 'Rheinland-Pfalz'), 
     ('sl', 'Saarland'), 
     ('sn', 'Sachsen'), 
     ('st', 'Sachsen-Anhalt'), 
     ('sh', 'Schleswig-Holstein'), 
     ('th', 'Thüringen'), 
    ) 

    name = models.CharField(max_length=255, verbose_name='Agentur') 
    address = models.CharField(max_length=255, verbose_name='Straße') 
    state = models.CharField(max_length=2, choices=BUNDESLAND_CHOICES, verbose_name='Bundesland') 
    city = models.CharField(max_length=255, verbose_name='Stadt') 
    zip = models.CharField(max_length=10, verbose_name='PLZ') 
    phone = models.CharField(max_length=40, blank=True, verbose_name='Telefonnr.') 
    fax = models.CharField(max_length=40, blank=True, verbose_name='Fax') 
    email = models.EmailField(verbose_name='E-Mail', help_text='Offizielle E-Mail') 
    url = models.URLField(verbose_name='URL') 
    owner = models.CharField(max_length=255, verbose_name='Besitzer') 
    description = models.TextField(verbose_name='Beschreibung') 
    category = models.ManyToManyField(Category, verbose_name='Kategorie') 
    user = models.ForeignKey(User, verbose_name='Benutzer', null=True, blank=True) 
    slug = models.SlugField(max_length=80, blank=True) 
    identity = models.CharField(max_length=64, unique=True, blank=True) 
    identity_used = models.BooleanField(default=False) 
    show = models.BooleanField(default=False, verbose_name='Anzeigen') 
    tp = models.DateTimeField(auto_now_add=True) 


# agency.models 
class AgencyActiveManager(models.Manager): 
    def get_query_set(self): 
     return super(AgencyActiveManager,self).get_query_set().filter(show=True) 

class Agency(Content): 
    clients = models.TextField(verbose_name='Klienten') 
    active = AgencyActiveManager() 
    objects = models.Manager() 

    def __unicode__(self): 
     return self.name 

    def save(self, **kwargs): 
     if not self.identity: 
      self.identity = hashlib.sha256('%s:%s' %(get_word(),datetime.datetime.now())).hexdigest() 
     if not self.slug: 
      self.slug = slugify(self.name, instance=self) 
     super(Agency, self).save(**kwargs) 

# agency.admin 

from django.contrib import admin 
from agency.models import Agency 

admin.site.register(Agency) 

관리자로 새 대행사 항목을 만들고 저장했습니다. '0 agencys'가

내가 수동으로 URL/관리/기관/기관/1을 호출하려고하면/I 얻을 : 파이썬 쉘을 통해 쿼리는 저장이 관리 페이지는 말한다

In [15]: Agency.objects.all() 
Out[15]: [<Agency: Argentur>] 

일을 보여줍니다 1

페이지를 찾을하지 않는 기본 키 아무 기관 객체가 없다는 것을 말하는 404 (404) 요청 방법 : http://localhost:8000/admin/agency/agency/1/

: 요청 URL을 GET

Das agency-Objekt mit preemschlüssel u'1 ist nicht vorhanden.

Django 설정 파일에 DEBUG = True가 있으므로이 오류가 표시됩니다. 이것을 False로 변경하면 Django는 표준 404 페이지를 표시합니다.

그러나 비단뱀 쉘은 말합니다 :

In [16]: Agency.objects.all()[0].pk 
Out[16]: 1 

내가 매우 분명 뭔가를 놓치고 있습니까?

내 생각 엔 추상 모델로 할 일이있는 것 같지만 무엇을 알아 내지 못합니다.

답변

3

모델 클래스 정의에 나열된 첫 번째 관리자는 관리 사이트 및 기타 여러 가지 작업에 사용되는 관리자입니다.

Django에는 모든 인스턴스를 기본 관리자로 반환하지 않는 관리자를 사용하는 것과 관련하여 여러 가지 버그가있었습니다. IMHO, 표준 관리자를 기본값으로 사용하는 것이 가장 좋으며 나중에 제한적인 관리자를 추가하는 것이 가장 좋습니다.

사실 더 이상 관리자를 사용하는 모델을 작성하지 않습니다. 나는

class AgencyManger(models.Manager): 
    def active(self): 
     return self.filter(show=True) 

를 작성하고 Agency.objects로 사용하므로 활성 개체에 대한 루트 검색어 세트는 Agency.objects.active()보다는 Agency.active.all()입니다 것입니다. 이는 .objects.이 항상 동일한 잘 알려진 동작을한다는 것을 의미합니다. 또한 코드에서 쉽게 찾고 이해할 수 있습니다.

관련 문제