2

最初のHTTPGET中(デーモンモードのWSGIがリロードされた直後)、admin.site.unregisterはNotRegistered例外をスローしますが、admin.site.registerはAlreadyRegistered例外(catch-22?)をスローします。ただし、後続のHTTPGETでは、すべてがエラーなしで問題なくロードされます。

設定:

  • Django 1.3
  • Apache 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
4

2 に答える 2

5

freenodeの#djangoでmlavinからの答えを見つけました

これはadmin.pyではなくmodels.pyで定義しています(これは問題ありません)が、コード内にそのモデルファイルに*をインポートする場所がある場合は、レジスタ呼び出しが再度実行されます

admin.pyに属するものを(models.pyから)admin.pyに移動することで解決しました!しかし、私の弁護では、コードベースを継承しました-なぜこのスニペットをadmin.pyではなくmodels.pyに配置するのかわかりません。

興味深いことに、この問題は「manage.py runserver」を介してローカルで発生することはありませんでしたが、Apache + WSGIを介してデプロイした場合にのみ、他の1人がローカルで再現できたと述べました。変。

しかし、ケースは閉じられました。

于 2012-09-13T19:10:21.350 に答える
0

私の問題は:

MyUser(AbstarctUser)カスタムモデル(model.py内)を使用してUser(例:モバイルを追加)で編集したいのですが、admin.pyファイルスクリプトで最初にモデルMyUserの登録を解除してから登録しますが、DjangoはカスタムMyUserモデルを登録しませんデフォルトでは、

したがって、私の場合、最初にカスタムモジュールの登録を解除する必要はなく、登録するだけで十分です。

于 2017-01-04T12:38:40.557 に答える