簡體   English   中英

我如何使用Django將其他模型字段添加到默認auth_user模型

[英]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.usernameself.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM