Django создает объект, имеющий ссылку на другой объект, используя сериализаторы

Я хочу создать заказ, который имеет несколько объявлений, и каждое объявление должно иметь ссылку на объект display. Ранее я делал подобное, просто задавая id объекта в методе 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."
                ]
            }
        }
    ]
}
Вернуться на верх