簡體   English   中英

Django自定義admin.site.register + admin.site.unregister在第一個HTTP GET(Apache + mod WSGI)上發生沖突的AlreadyRegistered + NotRegistered

[英]Django custom admin admin.site.register + admin.site.unregister conflicting AlreadyRegistered + NotRegistered on 1st HTTP GET (Apache + mod WSGI)

在第一個HTTP GET期間(在重新加載守護程序模式下的WSGI之后),admin.site.unregister引發NotRegistered異常,但是admin.site.register引發AlreadyRegistered異常(catch-22?)但是,在后續的HTTP GET上,一切正常,沒有錯誤。

設定:

  • Django 1.3
  • 阿帕奇2.2
  • CentOS的

settings.py:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    #'django.contrib.sites', #(this didn't seem to make a difference)
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    'django.contrib.admindocs',
    'base',
    'sample',
    'reports',
    'south',
)

models.py:

from django.db import models
from django.contrib import admin
from django.contrib.auth.models import User
from django.contrib.auth.admin import UserAdmin as AuthUserAdmin

class Company(models.Model):
  name = models.CharField(max_length=256)

class CompanyUser(models.Model):
  company = models.ForeignKey(Company)
  user = models.OneToOneField(User)

class CompanyUserInline(admin.StackedInline):
  model = CompanyUser
  max_num = 1
  can_delete = False

class CompanyUserAdmin(AuthUserAdmin):
  inlines = [ CompanyUserInline ]

# STUCK HERE !!
try:
  admin.site.unregister(User)
  # throws NotRegistered at / The model User is not registered
except:
  admin.site.register(User, CompanyUserAdmin)
  # throws AlreadyRegistered at / The model User is already registered

我在freenode的#django上找到了mlavin的答案

您是在models.py而不是admin.py中定義的(這很好),但是如果您的代碼中有任何位置確實導入了該模型文件中的*,它將再次執行注冊調用

將admin.py中的內容移動到admin.py(從models.py)解決了! 不過,在我的辯護中,我繼承了代碼庫-我不確定為什么要將這段代碼放在models.py而不是admin.py中。

有趣的是:雖然這個問題從來沒有通過“ manage.py runserver”在本地出現,但是只有當我通過Apache + WSGI進行部署時,另一個人提到他們能夠在本地復制它。 奇怪的。

但是案件結案了。

我的問題是:

我想使用MyUser(AbstarctUser)自定義模型(在model.py中)在User(例如,添加移動設備)中進行編輯,並在admin.py文件腳本中首先注銷我的模型MyUser,然后對其進行注冊,但是Django無法注冊我的自定義MyUser模型默認,

因此,在我的情況下,無需先注銷我的自定義模塊,只需注冊就足夠了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM