Mám 3 modely: Výrobce, Produkt a MakerItem, že vytváří vztah mezi předměty a jejich tvůrci:
class Maker(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4)
name = models.CharField(max_length=100)
class Item(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4)
name = models.CharField(max_length=100)
class MakerItem(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4)
item_id = models.ForeignKey(Item, on_delete=models.CASCADE)
maker_id = models.ForeignKey(Maker, on_delete=models.CASCADE)
položky mohou mít náhodné množství tvůrců.
Chci vytvořit obě Položky a MakerItem objektů současně s jediným souborem dat, například, pokud Výrobce s id = "abcd" již existuje, a já jít do /položky a odeslat POST požadavek s následujícími údaji:
{
"name": "item1",
"makers": [
{
"maker_id": "abcd"
}
]
}
Chci serializátor na Položku vytvořit objekt a MakerItem objektu. Jsem dosáhl tohoto, s následující nastavení:
views.py
class ItemListCreate(ListCreateAPIView):
queryset = Item.objects.all()
serializer_class = ItemSerializer
serializers.py
class ItemSerializer(serializers.ModelSerializer):
class MakerItemSerializer(serializers.ModelSerializer):
class Meta:
model = MakerItem
exclude = ['id', 'item_id']
makers = MakerItemSerializer(many=True)
class Meta:
model = Item
fields = ['id', 'name', 'makers']
def create(self, validated_data):
maker_item_data = validated_data.pop('makers')
item_instance = Item.objects.create(**validated_data)
for each in maker_item_data:
MakerItem.objects.create(
item_id=check_instance,
maker_id=each['maker_id']
)
return item_instance
ale když Django se pokusí vrátit vytvořený objekt, je to vždy dává mi chybu:
AttributeError at /item/
Got AttributeError when attempting to get a value for field `makers` on serializer `ItemSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `Item` instance.
Original exception text was: 'Item' object has no attribute 'makers'.
Co dělám špatně?
Díky
EDIT: Pro upřesnění, objekty, které si vytvořili, a naplnění databáze správně, ale když browsable API, které DRF poskytuje pokusí zobrazit vytvořený objekt, to mi dává chybu výše.