django-models - AttributeError:“经理”对象没有属性“保存”
问题描述
我创建了一个模型类 Admin、Entrepreneur、CustomUser 和两个函数,它们首先将数据添加到这些类中,我还定义了两个接收器,它们仅在 CostumUser 类中添加数据时运行
这是我的模型文件:
from django.db import models
from django.contrib.auth.models import *
#user
from django.db.models.signals import post_save
from django.dispatch import receiver
class CustomUser(AbstractUser):
user_type=((1,"admin"),(2,"staff"))
user_type=models.CharField(default=1,choices=user_type,max_length=10)
# Entrepreneur
class Entrepreneur(models.Model):
id_models= models.IntegerField(primary_key=True)
admin=models.OneToOneField(CustomUser,on_delete=models.CASCADE)
date_naissance=models.DateField()
adresse_entr=models.CharField(max_length=20)
telephone=models.IntegerField()
statut_social=(('ce','celébataire'),
('ma','marié'),
('di','divorcé'),
('ve','veuf'),
)
occupation=models.CharField(max_length=50)
niveau_scolaire=(
('pri','primaire'),
('sec','secondaire'),
('cap','certificat aptitude professionel'),
('btp','brevet technicien professionel'),
('bts','brevet technicien superieur'),
('lic','license'),
('mai','maitrise'),
('mas','mastere'),
('doc','doctorat'),
)
niveau_scolaire=models.CharField(default='ser',choices=niveau_scolaire,max_length=50)
annnee_exp=models.IntegerField()
#Projet
class Projet(models.Model):
id_models=models.IntegerField(primary_key=True)
nom_projet=models.CharField(max_length=30)
lieu_implantation=models.CharField(max_length=20)
type_projet=(
('ser','service'),
('com','commerce'),
('agr','agricuture'),
('ind','industrie'),
('IT','technologie information'),
('art','artisanat'),
('tor','tourisme'),
)
type_projet=models.CharField(default='ser',choices=type_projet,max_length=50)
produit=models.CharField(max_length=50)
id_promoteur=models.ForeignKey(Entrepreneur,on_delete=models.CASCADE)
#admin
class Admin(models.Model):
id_admin=models.AutoField(primary_key=True)
admin = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
objects=Manager()
@receiver(post_save,sender=CustomUser)
def create_user_profile(sender,instance,created,**kwargs):
if created:
if instance.user_type==1:
Admin.objects.create(admin=instance)
if instance.user_type==2:
Entrepreneur.objects.create(admin=instance)
@receiver(post_save,sender=CustomUser)
def save_user_profile(sender,instance,**kwargs):
if instance.user_type==1:
Admin.objects.save()
if instance.user_type==2:
Entrepreneur.objects.save()
我运行 makemigration 并在运行 createupeuser 和创建(用户名、电子邮件和密码)之后执行迁移命令
我收到此错误:
Traceback (most recent call last):
File "manage.py", line 21, in <module>
main()
File "manage.py", line 17, in main
execute_from_command_line(sys.argv)
File "C:\Users\hp\PycharmProjects\business\lib\site-packages\django\core\management\__init__.py",
line 401, in execute_from_command_line
utility.execute()
File "C:\Users\hp\PycharmProjects\business\lib\site-packages\django\core\management\__init__.py",
line 395, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "C:\Users\hp\PycharmProjects\business\lib\site-packages\django\core\management\base.py", line
328, in run_from_argv
self.execute(*args, **cmd_options)
File "C:\Users\hp\PycharmProjects\business\lib\site-
packages\django\contrib\auth\management\commands\createsuperuser.py", line 79, in execute
return super().execute(*args, **options)
File "C:\Users\hp\PycharmProjects\business\lib\site-packages\django\core\management\base.py", line
369, in execute
output = self.handle(*args, **options)
File "C:\Users\hp\PycharmProjects\business\lib\site-
packages\django\contrib\auth\management\commands\createsuperuser.py", line 189, in handle
self.UserModel._default_manager.db_manager(database).create_superuser(**user_data)
File "C:\Users\hp\PycharmProjects\business\lib\site-packages\django\contrib\auth\models.py", line
158, in create_superuser
return self._create_user(username, email, password, **extra_fields)
File "C:\Users\hp\PycharmProjects\business\lib\site-packages\django\contrib\auth\models.py", line
141, in _create_user
user.save(using=self._db)
File "C:\Users\hp\PycharmProjects\business\lib\site-packages\django\contrib\auth\base_user.py",
line 66, in save
super().save(*args, **kwargs)
File "C:\Users\hp\PycharmProjects\business\lib\site-packages\django\db\models\base.py", line 745,
in save
self.save_base(using=using, force_insert=force_insert,
File "C:\Users\hp\PycharmProjects\business\lib\site-packages\django\db\models\base.py", line 793,
in save_base
post_save.send(
File "C:\Users\hp\PycharmProjects\business\lib\site-packages\django\dispatch\dispatcher.py", line
173, in send
return [
File "C:\Users\hp\PycharmProjects\business\lib\site-packages\django\dispatch\dispatcher.py", line
174, in <listcomp>
(receiver, receiver(signal=self, sender=sender, **named))
File "C:\Users\hp\PycharmProjects\business\oasisconsuting\businessplan\models.py", line 74, in
save_user_profile
Admin.objects.save()
AttributeError: 'Manager' object has no attribute 'save'
怎么了 !以及如何解决我的错误?
解决方案
# managers.py
from django.contrib.auth.models import BaseUserManager
class UserManager(BaseUserManager):
use_in_migrations = True
def _create_user(self, email, password, **extra_fields):
if not email:
raise ValueError("The given email must be set")
email = self.normalize_email(email)
user = self.model(email=email, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, email, password=None, **extra_fields):
extra_fields.setdefault("is_staff", False)
extra_fields.setdefault("is_superuser", False)
return self._create_user(email, password, **extra_fields)
def create_superuser(self, email, password, **extra_fields):
extra_fields.setdefault("is_staff", True)
extra_fields.setdefault("is_superuser", True)
if extra_fields.get("is_staff") is not True:
raise ValueError("Superuser must have is_staff=True.")
if extra_fields.get("is_superuser") is not True:
raise ValueError("Superuser must have is_superuser=True.")
return self._create_user(email, password, **extra_fields)
在你的用户类中models.py
添加这个objects = UserManager()
推荐阅读
- django - Django 2.1,如何在模板中显示外键值?
- hyperledger-fabric - 超级账本结构多主机设置中的错误
- java - 只想将哈希图中的第一个键和第二个键分配给 Long 变量 xyzId1 和 xyzId2
- android - 滑动以从android中的sqlite数据库中删除后listview不更新
- kubernetes - “来自服务器的错误(超时):服务器无法在分配的时间内返回响应,但可能仍在处理请求(获取节点)”
- excel - VBA Excel循环与表格自动填充
- java - 在 tomcat servlet 上使用服务器发送事件进行 gzip/deflate 压缩
- python - 如果缺少连续值,则添加 nan
- wpf - 在 Playback 中设置 UIElementText 时,编码的 UI 测试未运行
- ruby-on-rails - Rails:如何总结每天的总价格