我删除了username字段,因为我希望用户能够使用他们的电子邮件地址登录,所以我在我的models.py:
class CustomUser(AbstractUser):
USER_TYPE = ((1, 'HOD'), (2, 'Staff'), (3, 'Student'))
username = None
email = models.EmailField(unique=True)
user_type = models.CharField(default=1, choices=USER_TYPE, max_length=1)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
class Student(models.Model):
admin = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
gender = models.CharField(max_length=1, choices=GENDER)
address = models.TextField()
profile_pic = models.ImageField(upload_to='media')
session_start_year = models.DateField(null=True)
session_end_year = models.DateField(null=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
在我的views.py,我尝试过:
user = CustomUser.objects.create_user(email=email, password=password, user_type=3, first_name=first_name, last_name=last_name)
Run Code Online (Sandbox Code Playgroud)
但我的create_user() 缺少 1 个必需的位置参数:'用户名' 我该如何解决这个问题?
阅读此 SO链接后,
PUT 最常用于更新功能,PUT 到已知资源 URI,请求正文包含原始资源的最新更新表示。
...我们需要再次发送数据的所有参数。
在我的控制器中,我有:
$student = Student::find($student_id);
$student->username = $request->username;
$student->email = $request->email;
$student->password = $request->password;
$path = $request->file('passport')->store('upload');
$student->passport = $path;
Run Code Online (Sandbox Code Playgroud)
我曾经对POST方法使用过相同的代码并且它有效,但是在将它用于 API 时,我使用了 POSTMANform-data并且必须$request->all()是null. 有人说我应该使用,x-www-form-urlencoded但这不允许文件上传。