Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用django向默认auth_用户模型添加额外的模型字段_Python_Django_Django Models_Django Forms - Fatal编程技术网

Python 如何使用django向默认auth_用户模型添加额外的模型字段

Python 如何使用django向默认auth_用户模型添加额外的模型字段,python,django,django-models,django-forms,Python,Django,Django Models,Django Forms,我是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 Us

我是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_用户模型中包括了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
我试图添加ForeignKey字段和normal字段来验证用户并创建配置文件表单,但在这里我遇到了如下错误

AttributeError at /admin/polls/userprofile/add/
'NoneType' object has no attribute 'username'
我是Django的新手,我不知道我哪里做错了,请帮助我找到合适的方法,向auth_用户添加额外字段并添加配置文件表单


提前感谢…

由于_ustr_uuu方法试图返回self.user.username,因此引发了错误,但是,一些UserProfile实例没有相关的用户实例,因为您在模型中将其定义为null=True

因此,如下更改UserProfile类的_str__方法

或者,如下更改您的UserProfile模型并进行迁移


试着阅读。这可能会对您有所帮助。@Anjaneyulu Batta感谢您如此快速的响应我尝试了同样的方法,但在创建用户配置文件时仍然出错我遇到了类似这样的错误“NoneType”对象没有“username”属性尝试在配置文件中添加user字段,如user=models.onetoonefeelduser,on_delete=models.CASCADE并迁移更改@在运行python manage.py makemigrations时,我已经添加了Anjaneyulu,请查看我的代码上方,我感觉您正在尝试在没有默认值的情况下向用户添加一个不可为null的字段“username”;我们不能这样做,数据库需要一些东西来填充现有行。@Anjaneyulu Batta和@Jerin Peter George非常感谢您宝贵的支持。如果你不介意的话,你能告诉我学习Django的好教程吗?我一周前就开始学习了。非常感谢@Jerin Peter George
class UserProfile(models.Model):
    # your fields

    def __str__(self):
        if self.user:
            return self.user.username
        return "no user related to this profile"
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