首页 > 解决方案 > django 'User' 对象在使用 post_save 时没有属性 'profile'

问题描述

登录管理面板时显示此错误“'用户'对象没有属性'配置文件'”

 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

# Create your models here.

class Student(models.Model):
  user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='student')

  age = models.IntegerField(max_length=2)
  standard = models.CharField(max_length=15)

  def __str__(self):
    return self.user.username

@receiver(post_save, sender=User)
def create_student_profile(sender, instance, created, **kwargs):
    if created:
        Student.objects.create(user=instance)

@receiver(post_save, sender=User)
def save_student_profile(sender, instance, **kwargs):
    instance.profile.save()
    

subject_choices = [
  ('math','math'),
  ('science','science'),
  ('physics','physics'),
]

class Teacher(models.Model):
  user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='teacher')

  subject = models.CharField(max_length=20, choices=subject_choices)

  def __str__(self):
    return self.user.username

@receiver(post_save, sender=User)
def create_teacher_profile(sender, instance, created, **kwargs):
    if created:
        Teacher.objects.create(user=instance)

@receiver(post_save, sender=User)
def save_teacher_profile(sender, instance, **kwargs):
    instance.profile.save()

batch_choices = [
  ('10','10:00 AM'),
  ('12','12:00 PM'),
  ('02','02:00 PM'),
  ('04','04:00 PM')
]

class Batch(models.Model):
  b_name = models.CharField(max_length=20)
  b_time = models.CharField(max_length=10, choices=batch_choices)

我还希望每当学生注册时,都会创建一个由其中的时间字段命名的批次,并且在每个第 41 个学生上,创建另一个具有下一次选择的批次

标签: django-modelsdjango-admindjango-signalsextending-classes

解决方案


推荐阅读