Django - 在创建用户时创建用户配置文件
问题描述:
为了实现简单的目标,我遵循Django文档here:创建新用户后立即创建用户配置文件。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管理),而不是有新创建的用户和用户配置文件,我得到以下错误: InternalError该在/管理/认证/用户/添加/ 当前事务被中止,忽略,直到事务块
这里结束命令是追踪误差部分:
/djangoProjects/lwboanova/lwboanova/apps/accounts/models.py in create_user_profile
34: UserProfile.objects.create(user=instance)
这似乎是一个完整性错误,但我没有得到它的原因。
如果有任何雅可以给我一些帮助,这将是伟大的。
答
只是想通了。
我忘了将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)
...,一切都如预期运行!
干杯试图帮助Ashray ^^
+0
,你可以请检查和指导我,所以问题http://*.com/questions/17806683/create-row-of-date-while-creating-superuser – user2086641 2013-07-23 14:37:12
答
你不应该使用:
user = models.ForeignKey(User, unique=True)
而是使用此:
from django.conf import settings
..
user = models.OneToOneField(settings.AUTH_USER_MODEL)
答
def create_profile(sender,**kwargs):
if kwargs['created']:
user_profile=UserProfile.objects.create(user=kwargs['instance'])
post_save.connect(create_profile,sender=User)
我认为这会帮助你。
您是否安装了django工具栏?如果是这样,请尝试禁用它,以便获得更好的错误信息。 – 2012-07-15 02:50:37