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