0

ユーザー プロファイル (ここではユーザー情報と呼ばれます) を追加した後、models.py ファイルは syncdb を実行しません。私は得ます:TypeError: __init__() takes at least 2 arguments (1 given)そして、models.pyファイルまたはそれに関連するいくつかのファイルに言及する上記のすべてのエラー。

Models.py ファイル:

def create_user_info(sender, instance, created, **kwargs):
    if created:
        UserInfo.objects.create(user=instance)

post_save.connect(create_user_info, sender=User)

class Book(models.Model):
    title = models.CharField(max_length=50)
    author = models.CharField(max_length=50)
    def __unicode__(self):
        return self.title

class UserInfo(models.Model):
    user = models.OneToOneField(User)
    pen_name = models.CharField(max_length=30)
    activated = models.BooleanField()
    def __unicode__(self):
        return self.email + '-' + self.pen_name

settings.py の Auth のこと:

AUTH_PROFILE_MODULE = 'Knights.UserInfo'

トレースバック:

Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/core/management/__init__.py", line 443, in execute_from_command_line
    utility.execute()
  File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/core/management/__init__.py", line 382, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/core/management/base.py", line 196, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/core/management/base.py", line 231, in execute
    self.validate()
  File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/core/management/base.py", line 266, in validate
    num_errors = get_validation_errors(s, app)
  File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/core/management/validation.py", line 30, in get_validation_errors
    for (app_name, error) in get_app_errors().items():
  File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/db/models/loading.py", line 158, in get_app_errors
    self._populate()
  File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/db/models/loading.py", line 64, in _populate
    self.load_app(app_name, True)
  File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/db/models/loading.py", line 88, in load_app
    models = import_module('.models', app_name)
  File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/Users/Mike/Desktop/Main/Django-Development/BBN/Knights/models.py", line 53, in <module>
    class Alert(models.Model):
  File "/Users/Mike/Desktop/Main/Django-Development/BBN/Knights/models.py", line 55, in Alert
    for_user = models.ForeignKey()
4

2 に答える 2

3

エラーは、投稿されたコードにはありません。あなたはドキュメントを文字どおりにフォローしたので、そうであったとしたら私は驚いたでしょう.

代わりに、Alert クラス (models.py:55) でエラーが検出されます。どちらを好むかに応じて、for_user = models.ForeignKey()またはfor_user = models.ForeignKey(User)にする必要があります。for_user = models.ForeignKey(UserInfo)

ForeignKeyあなたの欠陥のあるコードは、そのメソッドを呼び出すclass のインスタンスをインスタンス化しようとしていまし__init__()た。そのメソッドには次のような宣言があります

def __init__(self, other_model):

したがって、パラメーターが 1 つ不足していることを示すエラー メッセージが表示されます。self暗黙的に渡されます。興味がある場合は、Python クラスのドキュメントを読んでください。

于 2012-08-03T19:04:28.053 に答える
-2

これを試して

class UserInfo(models.Model):
    user = models.OneToOneField(User)
    pen_name = models.CharField(max_length=30)
    activated = models.BooleanField()
    def __unicode__(self):
        return self.email + '-' + self.pen_name

    def create_user_info(self, **kwargs):
         u = kwargs["instance"]
         created = kwargs["created"]
         if not created:
            UserInfo(user=u).save()

post_save.connect(UserInfo.create_user_info, sender=User)
于 2012-08-03T18:36:39.900 に答える