[英]How to create custom registration form using auth_user model and cutom model fields in django
[英]How can i add extra model fields to default auth_user model using django
我是Django的新手。 我需要在用户模型(数据库中的auth_user表)中包括一个额外的模型字段,以及我想在auth_user中也包括ForeignKey字段
我有四个模型类,如Semestertype,Programtype,Programchoice:
import datetime
from django.utils import timezone
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.contrib.auth.models import AbstractUser
class Semestertype(models.Model):
value = models.CharField(max_length=100, null=True, blank=True)
class Meta:
db_table = 'semestertype'
class Programtype(models.Model):
value = models.CharField(max_length=100, null=True)
class Meta:
db_table = 'programtype'
class Programchoice(models.Model):
value = models.CharField(max_length=100, null=True, blank=True)
class Meta:
db_table = 'programchoice'
我使用下面的AbstractUser在auth_user模型中包括Semestertype,Programtype和Programchoice模型
class User(AbstractUser):
semestertype = models.ForeignKey(Semestertype, on_delete=models.CASCADE,null=True, blank=True)
programtype = models.ForeignKey(Programtype, on_delete=models.CASCADE,null=True, blank=True)
programchoice = models.ForeignKey(Programchoice, on_delete=models.CASCADE,null=True, blank=True)
filenumber = models.CharField(null=True, max_length=9, blank=True)
personalemail = models.EmailField(max_length=254, blank=True)
nameofbachelorsdegree = models.CharField(max_length=200, null=True, blank=True)
这是我的个人资料模型:
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE,null=True, blank=True)
description = models.CharField(max_length=100, default = '')
city = models.CharField(max_length=100, default = '')
phone = models.IntegerField(default=0)
def __str__(self):
return self.user.username
def create_profile(sender, **kwargs):
if kwargs['created']:
user_profile = UserProfile.objects.create(user=kwargs['instance'])
post_save.connect(create_profile, sender=User)
最后,我添加我的settings.py文件,如下所示:
AUTH_USER_MODEL = 'polls.User'# changes built-in user model to ours
我试图向auth_user添加ForeignKey字段和普通字段并创建配置文件表单,但是在这里我得到如下错误
AttributeError at /admin/polls/userprofile/add/
'NoneType' object has no attribute 'username'
我是Django的新手,我不知道我在哪里做错了,请帮助我任何向auth_user添加额外字段并添加配置文件表单的正确方法
提前致谢...
由于__str__()
方法尝试返回self.user.username
而self.user.username
但是某些UserProfile
实例没有相关的user
实例(因为在模型中将其定义为null=True
)
因此,如下更改UserProfile
类的__str__()
方法,
class UserProfile(models.Model):
# your fields
def __str__(self):
if self.user:
return self.user.username
return "no user related to this profile"
或者,如下更改您的UserProfile
模型并进行迁移,
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE) # <<< change is here
description = models.CharField(max_length=100, default='')
city = models.CharField(max_length=100, default='')
phone = models.IntegerField(default=0)
def __str__(self):
return self.user.username
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.