django - ValueError:无法分配“2”:“Model.field”必须是“Model”实例
问题描述
我有一个适用于 otp 的注册系统。我有一个自定义用户模型
class User(AbstractUser):
password = models.CharField(max_length=128, blank=True, null=True)
email = models.EmailField(max_length=254, unique=True)
dial_code_id = models.CharField(max_length=100)
mobile_number = models.CharField(max_length=100, blank=True, null=True)
username = models.CharField(max_length=150, unique=True, blank=True, null=True)
is_resource = models.BooleanField(default=False)
is_customer = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
skills = models.ManyToManyField(Skills)
class Meta:
db_table = "my_user"
def __str__(self):
return self.mobile_number
我创建了一个“otp”模型来保存 otp。
class Otp(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
otp = models.IntegerField()
created_on = models.DateTimeField(default=django.utils.timezone.now)
class Meta:
db_table = "otp"
我的观点看起来像这样
class UserCreateResponseModelViewSet(viewsets.ModelViewSet):
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
if serializer.is_valid():
serializer.save()
custom_data = {
"status": True,
"message": 'Successfully registered your account.',
"data": serializer.data
}
generate_otp(serializer.data['id'])
return Response(custom_data, status=status.HTTP_201_CREATED)
else:
custom_data = {
"status": False,
"message": serializer.errors,
}
return Response(custom_data, status=status.HTTP_200_OK)
class UserCreateViewSet(UserCreateResponseModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
我有一个生成和保存 otp 的功能
def generate_otp(user_id):
try:
otp_obj = Otp.objects.get(user_id=user_id)
except Otp.DoesNotExist:
otp_obj = None
if otp_obj is None:
otp = random.randrange(1000, 9999)
otp_obj = Otp(user=user_id, otp=otp)
otp_obj.save()
序列化器看起来像
class UserSerializer(serializers.ModelSerializer):
mobile_number = serializers.CharField(
required=True,
validators=[UniqueValidator(queryset=User.objects.all())]
)
class Meta:
model = User
fields = ['id', 'first_name', 'last_name', 'email', 'dial_code_id','mobile_number', 'is_resource', 'is_customer']
用户已成功注册,但是在将 otp 保存在“generate_otp()”中时,我收到一个错误,例如
raise ValueError(ValueError: Cannot assign "2": "Otp.user" must be a "User" instance.
我该如何克服呢?
这是正确的方法吗?
解决方案
看起来问题出在这里:
otp_obj = Otp(user=user_id, otp=otp)
您正在为该user
字段分配一个 id (int)。不是user_id
领域
推荐阅读
- github-actions - Github Actions:在配置文件上触发以克隆存储库
- android - 如何自定义生成的二维码,如下图所示
- angular - 自动关闭角材料侧边菜单
- objective-c - 使用没有 ssl 的域 Objective-c
- python - 从栅格计算多边形平均值:rasterstats.zonal_stats 与 rio.clip
- python - 带有两个变量以匹配数字的 for 循环
- python - 无法从谷歌合作的雅虎财经获取数据
- python - Numpy 数组转换
- php - wordpress acf 字段类型所见即所得编辑器正在从 UTM 断开链接中删除问号
- ssl - 使用 openssl 验证 .ca-bundle 和 .crt