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

#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."  ]  }  }  ] }