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