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>
)