0

別のモデルの列を外部キーとしてuserprofileを拡張しようとしています。しかし、そのスローエラーメッセージを保存している間。

Models.py:

class Team_Profile(models.Model):
    team_name = models.CharField(max_length=200, unique=True)
    
    
class UserProfile(models.Model):
    user = models.OneToOneField(User)
    team_name = models.ForeignKey(Team_Profile)


    def __str__(self):
        return "%s's profile" % self.user

    def save(self, *args, **kwargs):
        try:
            existing = UserProfile.objects.get(user=self.user)
            self.id = existing.id
        except UserProfile.DoesNotExist:
            pass
        models.Model.save(self, *args, **kwargs)

def create_user_profile(sender, instance, created, **kwargs):
    if created:
        created = UserProfile.objects.get_or_create(user=instance)
post_save.connect(create_user_profile, sender=User)

以下は私のviews.pyです:

Views.py:

data = request.POST.copy()
team = data['team_hidden']
try:
            team_name = Team_Profile.objects.get(team_name=team)
except Team_Profile.DoesNotExist:
            team_profile = Team_Profile()
            team_profile.team_name = team
            team_profile.save()
                
try:
            user=User.objects.get(username=name)
            return render_to_response("user_exist.html", {'media_url':media_url})
            
except User.DoesNotExist:

            user= User.objects.create_user(name,User.email,User.password)
            user.first_name=first_name
            user.last_name=last_name
            user.save()

                        
            userprofile = UserProfile()
            userprofile.user = user
            userprofile.team_name = Team_Profile.objects.get(team_name=team)                    


            userprofile.save()

さらに情報が必要な場合はお知らせください。どんな助けでも大歓迎です。

トレースバック:

トレースバック:

File "/home/dtechsun/testapp/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/home/dtechsun/testapp/myentrancetest/views.py" in create_login
  796.          user= User.objects.create_user(name,User.email,User.password)
File "/home/dtechsun/testapp/django/contrib/auth/models.py" in create_user
  135.         user.save(using=self._db)
File "/home/dtechsun/testapp/django/db/models/base.py" in save
  460.         self.save_base(using=using, force_insert=force_insert, force_update=force_update)
File "/home/dtechsun/testapp/django/db/models/base.py" in save_base
  592.                 created=created, raw=raw, using=using)
File "/home/dtechsun/testapp/django/dispatch/dispatcher.py" in send
  172.             response = receiver(signal=self, sender=sender, **named)
File "/home/dtechsun/testapp/myentrancetest/models.py" in create_user_profile
  53.         created = UserProfile.objects.get_or_create(user=instance)
File "/home/dtechsun/testapp/django/db/models/manager.py" in get_or_create
  135.         return self.get_query_set().get_or_create(**kwargs)
File "/home/dtechsun/testapp/django/db/models/query.py" in get_or_create
  387.                 obj.save(force_insert=True, using=self.db)
File "/home/dtechsun/testapp/myentrancetest/models.py" in save
  49.       models.Model.save(self, *args, **kwargs)
File "/home/dtechsun/testapp/django/db/models/base.py" in save
  460.         self.save_base(using=using, force_insert=force_insert, force_update=force_update)
File "/home/dtechsun/testapp/django/db/models/base.py" in save_base
  571.                     result = manager._insert(values, return_id=update_pk, using=using)
File "/home/dtechsun/testapp/django/db/models/manager.py" in _insert
  195.         return insert_query(self.model, values, **kwargs)
File "/home/dtechsun/testapp/django/db/models/query.py" in insert_query
  1437.     return query.get_compiler(using=using).execute_sql(return_id)
File "/home/dtechsun/testapp/dbindexer/compiler.py" in execute_sql
  256.         return super(SQLInsertCompiler, self).execute_sql(return_id=return_id)
File "/home/dtechsun/testapp/djangotoolbox/db/basecompiler.py" in execute_sql
  348.                                         "field) to None!" % field.name)

Exception Type: DatabaseError at /create_login/
Exception Value: You can't set team_name (a non-nullable field) to None!

ありがとう、

スニール

4

5 に答える 5

1

全体的なロジックは正しいようです。しかし、私はエラーが最初のブロックを除いて起こっているようだと思います

team_profile.team_name = team
この時点でチームはNoneになると思います。これにより、次の行の保存でエラーが発生する可能性があります。したがって、リクエストから取得した値を確認してください。

于 2012-05-15T14:26:12.533 に答える
1

team_nameのデフォルトの追加は正常に機能しました。皆さんの助けに感謝します。

class UserProfile(models.Model): 
        user = models.OneToOneField(User)   
        team_name = models.ForeignKey(Team_Profile, default=0) 
于 2012-05-18T08:05:57.593 に答える
0

ここでの問題は、UserProfileをUserモデルとのOneToOneFieldマッピングとして取得していることにあると思います。Djangoは、UserProfileモデルとの関係があるため、team_nameにnull以外の値を期待しています。ユーザーを作成するときにteam_nameを設定してみて、それが役立つかどうかを確認してください。

于 2012-05-15T13:14:18.467 に答える
0

User.objects.create_userインスタンスを作成/保存し、実行Userをトリガーします。次に、一致するインスタンスcreate_user_profileがない場合は失敗します。UserProfile

def create_user_profile(sender, instance, created, **kwargs):
    if created:
        # team_name is None, 
        # but UserProfile.team_name is declared w/ null=False, by default
        created = UserProfile.objects.get_or_create(user=instance)
于 2012-05-15T13:45:57.950 に答える
0

これは、次の理由による可能性があります。

team = data['team_hidden']

チームが空である可能性があります(投稿中にteam_hiddenが送信されなかったか、getリクエストでした...)

于 2012-05-15T13:51:54.730 に答える