ValueError at/user/register无法分配“('Civil Engineering(CE)”,):“user.department”必须是“department”实例

2024-04-25 08:48:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我不能将数据插入数据库。 我想创建一个具有特定部门名称和部门表的用户,并使用外键来检测来自某个部门的用户。
这是我的模型文件:

class Department(models.Model):
name = models.CharField(max_length=100, blank=False, null=False)
admin_id = models.ForeignKey('Admin' , on_delete=models.CASCADE)
admin_post_id = models.ForeignKey('Admin_Post' , on_delete=models.CASCADE)

def __str__(self):
    return name

这是我的自定义用户模型:

class User(AbstractBaseUser):
      first_name = models.CharField(max_length=50, blank=False, null=False)
      last_name = models.CharField(max_length=50, blank=False, null=False)
      address = models.CharField(max_length=150)
      phone_number = models.IntegerField( blank=False, null=False, unique=True)
      department = models.ForeignKey('Department' , on_delete=models.CASCADE)
      semester = models.FloatField(blank=False, null=False)
      registation = models.IntegerField(blank=False, null=False, unique=True)
      email = models.EmailField(max_length=150, blank=False, null=False, unique=True)
      password = models.CharField(max_length=150, blank=False)
      password_con = models.CharField(max_length=150, blank=False, null=True)
      USERNAME_FIELD = 'email'
      REQUIRED_FIELD = ['email']
      objects = UserManager()
      def _str__(self):
         return registration;

这是我的视图文件:

def register(request):
   if request.method == 'POST':
      first_name     = request.POST['first_name']
      last_name      = request.POST['last_name']
      address        = request.POST['address']
      phone_number   = request.POST['phone_number']
      department     = request.POST['department']
      semester       = request.POST['semester']
      registration    = request.POST['registration']
      email          = request.POST['email']
      password       = request.POST['password']
      password_con   = request.POST['password_con']
      user = Department()
      user = User.objects.create_user(first_name=first_name ,last_name=last_name ,address=address ,phone_number=phone_number ,department=department ,semester=semester ,registration=registration ,email=email ,password=password)
    if User.objects.filter(email=email).exists():
        messages.info(request,'Email is Already taken')
    elif User.objects.filter(registration=registration):
        messages.info(request,'Registration Id is Already taken')
    elif password != password_con:
        messages.info(request,'Credentials not mathcing')
    else:

        # user.department = Department.objects.get()
        user.save()
        print('user created')
        return redirect('signin/')
else:
    return render(request,'register.html')

Tags: namefalsemodelsemailrequestpasswordregistrationpost
2条回答

你的台词

department     =    request.POST['department']

应该是这样的:

department     =    Department.objects.get(id=request.POST['department'])

您试图从一个名称中建立数据库关系,但在Django中不能这样做。 必须首先检索与POST数据对应的Department实例,并给出它,以便Django创建一个外键关系

像这样的

# retrieve object
department_instance = Department.objects.get(name=request.POST['department']) # here 'Civil Engineering (CE)'
# use the instance (actually only the ID of that instance will be stored in the table User, but that's a detail)
User.objects.create_user(department=department_instance.id, etc...) #you can omit '.id'

相关问题 更多 >

    热门问题