python - Django REST : Serializer lookup by UUID

标签 python django django-models django-rest-framework

我正在 Django REST 中创建这个简单的购物 API。

在内部,我使用 ID 作为外键约束,而 guuids被带到外面的世界。

对于结帐过程,用户提供他愿意购买的商品 ID 列表。因此,POST 数据中的对象如下所示:

{
  assets: [
    {
       'product': 'd9d5044d-2284-4d15-aa76-2eee3675035b',
       'amount': 4
    },
    ....
  ]
}

我正在使用以下票据/ Assets 模型:
# Ticket
class Ticket(models.Model):
    uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
    owner = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='tickets', on_delete=models.CASCADE)


# Assets
class Asset(models.Model):
    ticket = models.ForeignKey(Ticket, related_name='assets', on_delete=models.CASCADE)
    stock_item = models.ForeignKey(Stock, related_name='stock_item', on_delete=models.SET_NULL, null=True)
    amount = models.IntegerField(validators=[MinValueValidator(0)])

序列化程序如下所示:
# Asset serializer
class AssetSerializer(serializers.ModelSerializer):

    class Meta:
        model = Asset
        fields = ('stock_item', 'amount')


# Ticket serializer
class TicketSerializer(WritableNestedModelSerializer):
    owner = serializers.ReadOnlyField(source='owner.username')
    assets = AssetSerializer(many=True)

    class Meta:
        model = Ticket
        fields = ('uuid', 'owner', 'assets', )

    def perform_create(self, serializer):
        serializer.save(owner=self.request.user)

发布上述类型的对象时,会出现以下错误:
{"assets":[{"stock_item": ["Invalid type. Expected PK, received string"]}]}

我似乎无法解决,我如何指示序列化程序使用 uuid作为查找值?我之前使用 lookup_field 在 View 级别解决了类似的问题成员,但这似乎并没有解决它。有什么建议?
在此处输入代码

最佳答案

如果我没理解错的话,是 SlugRelatedField应该能够找到正确的相关对象。

class AssetSerializer(serializers.ModelSerializer):
    ticket = serializers.SlugRelatedField(
        read_only=True,
        slug_field='uuid',
        queryset=Ticket.objects.all() # Might be redundant with read_only=True
    )

    class Meta:
        model = Asset
        fields = ('ticket', 'stock_item', 'amount')

关于python - Django REST : Serializer lookup by UUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52507413/

相关文章:

python - 在使用Chalice编写的lambda函数中调用特定路由

python - 每次我对 float 列表(具有 nan 值)进行排序时,我都会得到一个不同的列表 python

python - 更快地计算六边形网格坐标的方法

python - Django mptt数据库迁移报错

php - Python 的 locals() 的 PHP 等价物是什么?

django - 在 Django 中动态删除内联表单集

python - 在单个 Django 模型字段中存储两种类型的值

python - 如何在接收模型端明确显示 Django ManyToMany 关系

python - Django中的单表继承

python - 图像未显示在 Django 应用程序上