24

ここでは、新しいユーザーが作成されたらすぐにユーザー プロファイルを作成するという単純な目的を達成するために、Django のドキュメントに従っています。

「アカウント」アプリがあり、accounts.models は次のようになります。

# -*- coding: utf-8 -*-
from django.db import models
from django.db.models.signals import post_save
from django.contrib.auth.models import User
from main.models import Store

class UserProfile(models.Model):

    GENRE_CHOICES = (
        ('m', 'Masculino'),
        ('f', 'Feminino'),
    )
    MARITAL_STATUS_CHOICES = (
        ('s', 'Solteiro'),
        ('c', 'Casado'),
        ('d', 'Divorciado'),
        ('v', 'Viúvo'),
    )

    user = models.ForeignKey(User, unique=True)
    birth_date = models.DateField()
    genre = models.CharField(max_length=1, choices=GENRE_CHOICES)
    address = models.CharField(max_length=150)
    postal_code_4 = models.PositiveIntegerField()
    postal_code_3 = models.PositiveIntegerField()
    locatity = models.CharField(max_length=30)
    marital_status = models.CharField(max_length=1, choices=MARITAL_STATUS_CHOICES)
    child_amount = models.PositiveSmallIntegerField()
    is_merchant = models.BooleanField(default=False)
    store = models.ForeignKey(Store, null=True)

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

post_save.connect(create_user_profile, sender=User)

すべて問題ないように見えますが、(django admin を使用して) 新しいユーザーを追加しようとすると、新しく作成されたユーザーとユーザー プロファイルではなく、次のエラーが表示されます: InternalError at /admin/auth/user/add/ current transaction is中止され、コマンドはトランザクション ブロックの最後まで無視されました

トレースバック エラーの部分は次のとおりです。

/djangoProjects/lwboanova/lwboanova/apps/accounts/models.py in create_user_profile

34: UserProfile.objects.create(user=instance)

整合性エラーのようですが、理由がわかりません。

ya のいずれかがこれについて私にいくつかの助けを与えることができれば素晴らしいだろう.

4

8 に答える 8

18

ちょうどそれを理解しました。

null=True残りのUserProfileモデル フィールドに追加するのを忘れていました。

したがって、accounts.models.UserProfileフィールドは次のようになります。

user = models.ForeignKey(User, unique=True)
birth_date = models.DateField(null=True)
genre = models.CharField(max_length=1, choices=GENRE_CHOICES, null=True)
address = models.CharField(max_length=150, null=True)
postal_code_4 = models.PositiveIntegerField(null=True)
postal_code_3 = models.PositiveIntegerField(null=True)
locatity = models.CharField(max_length=30, null=True)
marital_status = models.CharField(max_length=1, choices=MARITAL_STATUS_CHOICES, null=True)
child_amount = models.PositiveSmallIntegerField(null=True)
is_merchant = models.BooleanField(default=False)
store = models.ForeignKey(Store, null=True)

...そして、すべてが意図したとおりに機能しています!

アシュレイを助けようとして乾杯^^

于 2012-07-15T03:17:38.763 に答える
18

次のものは使用しないでください。

user = models.ForeignKey(User, unique=True)

代わりにこれを使用します:

from django.conf import settings
..
user = models.OneToOneField(settings.AUTH_USER_MODEL)
于 2014-03-15T02:07:08.483 に答える