DRF Error: Cannot assign must be a instance
DRF Error: Cannot assign must be a instance
我正在开发一款可让您跟踪费用的应用程序,我正尝试在用户注册时创建一个 'balnace' 对象,但当我尝试这样做时,出现错误:无法分配“15”:“Balance.user_id”必须是“用户”实例。
型号
class Balance(models.Model):
balance = models.FloatField(
verbose_name="Balance", blank=False, null=False)
user_id = models.ForeignKey(
'expenseApi.Users', verbose_name="Usuario", blank=False, null=False, on_delete=models.PROTECT)
def __str__(self):
return '{}'.format(self.pk)
序列化器
class RegisterSerializer(serializers.ModelSerializer):
tokens = serializers.SerializerMethodField()
email = serializers.EmailField(max_length=50)
class Meta:
model = Users
fields= ['id', 'email', 'password', 'name', 'lastname', 'birthday', 'tokens']
extra_kwargs = {
'password': {
'write_only': True,
},
}
def get_tokens(self,user):
refresh = RefreshToken.for_user(user)
data = {
'refresh': str(refresh),
'access': str(refresh.access_token),
}
return data
def create(self, request):
email= Users.objects.filter(email=request['email'])
if email:
raise serializers.ValidationError({'detail': 'El email ya esta en uso'})
user = Users.objects.create_user(email=request['email'],
password=request['password'],
name=request['name'],
lastname=request['lastname'],
birthday=request['birthday'])
user['balance'] = Balance.objects.create(balance=0,user_id=user.id)
return user
我没有详细介绍您代码的逻辑,但我猜根据您的代码出现错误
user['balance'] = Balance.objects.create(balance=0,user_id=user.id)
应该是
user['balance'] = Balance.objects.create(balance=0, user_id=user)
由于您将 ForeignKey
命名为 user_id
,这意味着您可以将 User
对象分配给 .user_id
,或者将主键分配给 .user_id_id
:
user['balance'] = Balance.objects.create(
balance=0,
<b>user_id_id = user.id</b>
)
不过,我建议将 user_id
重命名为 user
,因为现在该字段“提示”它是一个 ID,但它不是。
class Balance(models.Model):
balance = models.FloatField(verbose_name='Balance')
<b>user</b> = models.ForeignKey(
'expenseApi.Users',
verbose_name='Usuario',
on_delete=models.PROTECT
)
# …
然后我们可以这样设置:
user['balance'] = Balance.objects.create(
balance=0,
<b>user_id = user.id</b>
)
我正在开发一款可让您跟踪费用的应用程序,我正尝试在用户注册时创建一个 'balnace' 对象,但当我尝试这样做时,出现错误:无法分配“15”:“Balance.user_id”必须是“用户”实例。
型号
class Balance(models.Model):
balance = models.FloatField(
verbose_name="Balance", blank=False, null=False)
user_id = models.ForeignKey(
'expenseApi.Users', verbose_name="Usuario", blank=False, null=False, on_delete=models.PROTECT)
def __str__(self):
return '{}'.format(self.pk)
序列化器
class RegisterSerializer(serializers.ModelSerializer):
tokens = serializers.SerializerMethodField()
email = serializers.EmailField(max_length=50)
class Meta:
model = Users
fields= ['id', 'email', 'password', 'name', 'lastname', 'birthday', 'tokens']
extra_kwargs = {
'password': {
'write_only': True,
},
}
def get_tokens(self,user):
refresh = RefreshToken.for_user(user)
data = {
'refresh': str(refresh),
'access': str(refresh.access_token),
}
return data
def create(self, request):
email= Users.objects.filter(email=request['email'])
if email:
raise serializers.ValidationError({'detail': 'El email ya esta en uso'})
user = Users.objects.create_user(email=request['email'],
password=request['password'],
name=request['name'],
lastname=request['lastname'],
birthday=request['birthday'])
user['balance'] = Balance.objects.create(balance=0,user_id=user.id)
return user
我没有详细介绍您代码的逻辑,但我猜根据您的代码出现错误
user['balance'] = Balance.objects.create(balance=0,user_id=user.id)
应该是
user['balance'] = Balance.objects.create(balance=0, user_id=user)
由于您将 ForeignKey
命名为 user_id
,这意味着您可以将 User
对象分配给 .user_id
,或者将主键分配给 .user_id_id
:
user['balance'] = Balance.objects.create(
balance=0,
<b>user_id_id = user.id</b>
)
不过,我建议将 user_id
重命名为 user
,因为现在该字段“提示”它是一个 ID,但它不是。
class Balance(models.Model):
balance = models.FloatField(verbose_name='Balance')
<b>user</b> = models.ForeignKey(
'expenseApi.Users',
verbose_name='Usuario',
on_delete=models.PROTECT
)
# …
然后我们可以这样设置:
user['balance'] = Balance.objects.create(
balance=0,
<b>user_id = user.id</b>
)