Python Django无法识别UUID外键

Python Django无法识别UUID外键,python,django,django-rest-framework,Python,Django,Django Rest Framework,我有一个当前的模型: class Apps(models.Model): """ Apps são os aplicativos que terão financeiro gerido, uma empresa/usuario pode ter multiplos apps conectados """ app_code = models.UUIDField(auto_created=True, default=uuid.uuid4, unique=True, p

我有一个当前的模型:

class Apps(models.Model):
    """
    Apps são os aplicativos que terão financeiro gerido, uma empresa/usuario pode ter multiplos apps conectados
    """
    app_code = models.UUIDField(auto_created=True, default=uuid.uuid4, unique=True, primary_key=True)
    chave_app = models.UUIDField(auto_created=True, default=uuid.uuid4, unique=True)
    usuario = models.ForeignKey(Usuario, on_delete=models.CASCADE)
    descricao = models.CharField(max_length=100)
usuario
字段是一个外键

usuario的
code>型号如下:

class Usuario(AbstractBaseUser):
    """
    Classe que ira gerir o cliente final, cadastrado via APP ou Webapp
    """
    user_id = models.UUIDField(auto_created=True, default=uuid.uuid4, unique=True, primary_key=True)
    nome = models.CharField(max_length=120)
    celular = models.CharField(max_length=20, unique=False)
    email = models.EmailField(max_length=100, unique=True)
    ativo = models.BooleanField(default=True)
    chave_api = models.UUIDField(auto_created=True, default=uuid.uuid4, unique=True)
    created_at = models.DateTimeField(auto_now_add=True)

    objects = AccountManager()

    USERNAME_FIELD = 'chave_api'
    REQUIRED_FIELDS = ['email', 'nome', 'celular']

    class Meta:
        ordering = ('-created_at',)
这一切都很好,但当我尝试将django rest框架上的应用程序列为列表时。我在另一个模型上也采用了同样的方法,没有外键,列表也没问题。错误仅在此视图上提供外键

在/应用程序中键入错误/ str返回的非字符串(类型UUID)

在数据库中,我的字段插入了以下值:

[
  {
    "app_code": "423676e9968d41beaeeeb2da43fc56d8",
    "chave_app": "86c18ae7809e4bda88830090f309a00c",
    "descricao": "Matrix Cashback 2.0",
    "usuario_id": "998339b46bde40bca053978670626a6f"
  }
]
我正在个人项目中使用Django rest框架和Django

现在不知道该怎么办,尝试了很多变体。它只是不将外键识别为UUID

我的序列化程序视图如下所示:

class AppSerializer(serializers.Serializer):
    app_code = serializers.UUIDField(read_only=True)
    usuario = serializers.UUIDField(read_only=True)
    descricao = serializers.CharField(required=True, max_length=100)
    chave_app = serializers.UUIDField(read_only=True)
    chave_api = serializers.UUIDField(required=True)

    class Meta:
        model = Apps
        fields = ('app_code', 'chave_app', 'usuario', 'descricao')

    def create(self, validated_data):
        usuario = Usuario.objects.get(chave_api=validated_data.get('chave_api'))
        return Apps.objects.create(
            descricao=validated_data.get('descricao'),
            usuario=usuario
        )

    def update(self, instance, validated_data):
        instance.descricao = validated_data.get('descricao', instance.descricao)
        instance.save()
        return instance
欢迎您的帮助!谢谢

这是尝试“列出”所有应用程序时浏览器上出现的错误

发现了问题。。。 当尝试列出序列化程序时,我在usuario上使用了
UUIDField
。但必须是
ReadOnlyField

我正确的
AppSerializer
现在是:

class AppSerializer(serializers.Serializer):
    app_code = serializers.UUIDField(read_only=True)
    usuario = serializers.ReadOnlyField(source='usuario.user_id')
    descricao = serializers.CharField(required=True, max_length=100)
    chave_app = serializers.UUIDField(read_only=True)
    # chave_api = serializers.UUIDField(required=True)

    class Meta:
        model = Apps
        fields = ('app_code', 'chave_app', 'usuario', 'descricao')

    def create(self, validated_data):
        usuario = Usuario.objects.get(chave_api=validated_data.get('chave_api'))
        return Apps.objects.create(
            descricao=validated_data.get('descricao'),
            usuario=usuario
        )

    def update(self, instance, validated_data):
        instance.descricao = validated_data.get('descricao', instance.descricao)
        instance.save()
        return instance