Я создаю этот простой API покупок в Django REST.
Внутренне я использую идентификаторы для ограничений внешнего ключа, в то время как guuids
переносятся во внешний мир.
Для процедуры оформления заказа пользователь предоставляет список идентификаторов товаров, которые он готов приобрести.Таким образом, объект в данных POST выглядит следующим образом:
{
assets: [
{
'product': 'd9d5044d-2284-4d15-aa76-2eee3675035b',
'amount': 4
},
....
]
}
Я использую следующие модели билетов / активов:
# 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
, но это, похоже, не решило ее.Есть предложения?
Введите код