6

Django 1.5.4 (安定版) ではエラーはありませんが、公式の tar.gz から Django 1.6 ベータ 4 でアプリケーションをテストしていたときに、起動時に検証モデルでエラーが発生しました。


models.py

from django.contrib.auth.models import AbstractUser, User

class ShopUser(AbstractUser):
    model_car = models.CharField(max_length=200)
    date_car = models.DateField()
    description = models.TextField(blank=True, db_index=True)

    manager = models.ForeignKey(User)

これは、manage.py runserverコンソール ログです。

Validating models...

Unhandled exception in thread started by <function wrapper at 0x2d941b8>
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/django/utils/autoreload.py", line 93, in wrapper
    fn(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/runserver.py", line 97, in inner_run
    self.validate(display_num_errors=True)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 312, in validate
    raise CommandError("One or more models did not validate:\n%s" % error_text)
django.core.management.base.CommandError: One or more models did not validate:

adminka.shopuser: Accessor for m2m field 'groups' clashes with related m2m field 'Group.user_set'. Add a related_name argument to the definition for 'groups'.
adminka.shopuser: Accessor for m2m field 'user_permissions' clashes with related m2m field 'Permission.user_set'. Add a related_name argument to the definition for 'user_permissions'.
auth.user: Accessor for m2m field 'groups' clashes with related m2m field 'Group.user_set'. Add a related_name argument to the definition for 'groups'.
auth.user: Accessor for m2m field 'user_permissions' clashes with related m2m field 'Permission.user_set'. Add a related_name argument to the definition for 'user_permissions'.
  • python -c "django をインポート;django.get_version() を印刷"
    1.6b4

この問題を解決するために何をする必要がありますか?

4

3 に答える 3

1

私にとって、これはDjango 1.6.5でこれを変更することで修正されました:

from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    pass

これに:

from django.contrib.auth.models import AbstractBaseUser

class CustomUser(AbstractBaseUser):
    pass

Django 1.6.5 ではその他の変更は必要ありません。@Stormlifter の提案にはメリットがありますが、この CustomUser を python-social-auth 経由で OAuth2 に使用しています。

$ pip freeze
Django==1.6.5
Markdown==2.4.1
MySQL-python==1.2.5
PyJWT==0.2.1
South==1.0
basicauth==0.2
boto==2.28.0
django-filter==0.7
django-guardian==1.2.0
django-storages==1.1.8
djangorestframework==2.3.14
httplib2==0.9
oauth2==1.5.211
oauthlib==0.6.3
python-memcached==1.53
python-oauth2==0.7.0
python-openid==2.2.5
python-social-auth==0.2.1
requests==2.4.1
requests-oauthlib==0.4.1
shortuuid==0.4.2
six==1.7.2
wsgiref==0.1.2

@jordiburgos が提案AUTH_USER_MODEL='myapp.CustomUser'したように、私の新しい CustomUser はデフォルトのユーザーよりも多くのことを行う必要があります。settings.py

これが役立つことを願っています!

于 2014-09-22T18:58:58.477 に答える
0

AbstractBaseUserからではなく から継承したいAbstractUser

ただし、ユーザー用の追加情報を保存したいだけのようです。これにカスタム ユーザー モデルを使用することはお勧めしません。関係を使用するだけです。

class ShopUser(models.Model):
    model_car = models.CharField(max_length=200)
    date_car = models.DateField()
    description = models.TextField(blank=True, db_index=True)
    user = models.OneToOneField(User)

複数の ShopUser を 1 人のユーザーに関連付ける必要がある場合は、それを ForeignKey にすることもできますが、OneToOne が最も理にかなっていると思います。

Django Documents が語ったように:

カスタム ユーザー モデルの指定

AbstractBaseUser

于 2013-10-01T18:07:40.503 に答える