#python #django #serialization #django-rest-framework #django-serializer
Вопрос:
Я хочу создать заказ с несколькими объявлениями, и каждое объявление должно содержать ссылку на объект отображения. Я делал подобные вещи ранее, просто установив идентификатор объекта в put
методе, и это сработало хорошо.
models.py
class OrdersDj(models.Model): id = models.CharField(primary_key=True, max_length=32, default=generate_uuid) user_id = models.CharField(max_length=45, blank=True, null=True) class Meta: ordering = ["dateplaced"] class AdsDj(models.Model): id = models.CharField(primary_key=True, max_length=32, default=generate_uuid) order = models.ForeignKey(OrdersDj,on_delete=models.CASCADE, blank=False, null=True) display = models.ForeignKey(Displays, on_delete=models.CASCADE, blank=False, null=True) null=True)
serializers.py
class AdsSerializer(serializers.ModelSerializer): display = DisplaySerializer() class Meta: model = Ads fields = "__all__" class OrderSerializer(serializers.ModelSerializer): ads = AdsSerializer(source="adsdj_set", many=True) def create(self, validated_data): ads_data = validated_data.pop('adsdj_set') order = Orders.objects.create(**validated_data) for ad in ads_data: Ads.objects.create(order=order, **ad) return order class Meta: model = Orders fields = "__all__"
данные put
метода
{ "user_id": "1", "ads": [ { "display_id": "10", // "display" : 10, // "display" : "10", } ] }
Здесь в зависимости от того, что я вставляю для отображения, он ожидает словарь, а не какие-либо другие типы.
{ "ads": [ { "display": { "non_field_errors": [ "Invalid data. Expected a dictionary, but got str." ] } } ] }