Python 自定义用户模型Django上的外键
我有以下两种型号Python 自定义用户模型Django上的外键,python,django,python-3.x,django-models,Python,Django,Python 3.x,Django Models,我有以下两种型号用户(定制)和活动。一个用户只能连接到一个活动,但一个活动可以从多个用户条目中引用,因此,我有一个多对一关系,并且我通过以下方式创建了此关系: Task app models.py from django.utils import timezone from django.contrib.auth import get_user_model User = get_user_model() class Task(models.Model): id =
用户
(定制)和活动
。一个用户只能连接到一个活动,但一个活动可以从多个用户
条目中引用,因此,我有一个多对一关系,并且我通过以下方式创建了此关系:
Task app
models.py
from django.utils import timezone
from django.contrib.auth import get_user_model
User = get_user_model()
class Task(models.Model):
id = models.AutoField(primary_key=True)
responsible = models.ForeignKey(User, on_delete=models.CASCADE)
task = models.CharField(null=False, max_length=140)
initial_date= models.DateField(default=timezone.now(), null=False)
ending_date = models.DateField(default=timezone.now(), null=False)
Accounts app
models.py
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
class MyAccountManager(BaseUserManager):
def create_user(self, email, username, password=None):
if not email:
raise ValueError("User must have an email address.")
if not username:
raise ValueError("User must have a username.")
user = self.model(email=self.normalize_email(email),username=username,)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, username, password):
user = self.create_user(email=self.normalize_email(email),username=username,password=password,)
user.is_admin = True
user.is_staff = True
user.is_superuser = True
user.save(using=self._db)
return user
class Account(AbstractBaseUser):
email = models.EmailField(verbose_name="email", max_length=60, unique=True)
username = models.CharField(max_length=30, unique=True)
# The following fields are required for every custom User model
last_login = models.DateTimeField(verbose_name='last login', auto_now=True)
date_joined = models.DateTimeField(verbose_name='date joined', auto_now_add=True)
is_admin = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
objects = MyAccountManager()
def __str__(self):
return self.email
def has_perm(self, perm, obj=None):
return self.is_admin
def has_module_perms(self, app_label):
return True
我已经完成了迁移,但是与FK的关系没有成功,甚至当我尝试对活动模型进行简单的查询设置时,例如q=Activity.objects.all()
我得到编程错误:列活动\u活动.responsible\id不存在。在与自定义用户的外键关系中,我缺少了哪一步?任何帮助、评论或编辑都将不胜感激:)
我对FK关系的期望结果
id | responsible | task | initial_date | ending_date
-------------------------------------------------------------
4 | roger_785 | Refactor code | 2020-01-16 | None
5 | mauro_12 | Fix the network | 2020-01-10 | None
将导入用户更改为:
from django.conf import settings
User = settings.AUTH_USER_MODEL
您的自定义用户类名为Account
,您有FK toUser
?我使用User=get\u User\u model()
来引用我的自定义用户类模型。错误是关于活动
表中不存在的责任id
,而您的模型是任务
,这是一个输入错误吗?很好!我做了更正,但结果仍然相同。您是否在settings.py
中设置了AUTH\u USER\u MODEL
,以指向您编写的自定义用户模型?