Каков правильный способ достижения просматриваемого API, который ожидает данные из 2 таблиц, но пишет в одну, а затем в другую, не входящую в первый набор таблиц?
У меня есть проект Django, в котором есть 3 модели
X:
from django.contrib.postgres.functions import RandomUUID
from django.db import models
class X(models.Model):
id = models.UUIDField(primary_key=True, default=RandomUUID)
name = models.CharField(max_length=100)
Y:
from django.contrib.postgres.functions import RandomUUID
from django.db import models
class Y(models.Model):
id = models.UUIDField(primary_key=True, default=RandomUUID)
name = models.CharField(max_length=100)
и XY:
from django.contrib.postgres.functions import RandomUUID
from django.db import models
from my_app.models import X
from my_app.models import Y
class XY(models.Model):
id = models.UUIDField(primary_key=True, default=RandomUUID)
x_id = models.ForeignKey(X, on_delete=models.CASCADE, db_column='x_id')
y_id = models.ForeignKey(Y, on_delete=models.CASCADE, db_column='y_id')
и стандартный ModelSerializer для каждого из них:
class XSerializer(serializers.ModelSerializer):
class Meta:
model = X
fields = ['id', 'name']
class YSerializer(serializers.ModelSerializer):
class Meta:
model = Y
fields = ['id', 'name']
class XYSerializer(serializers.ModelSerializer):
class Meta:
model = XY
fields = ['id', 'x_id', 'y_id']
И я хотел бы каким-то образом в запросах get при получении X
объектов, также показывать XY
объекты, связанные с ним.
При POST-запросах я хотел бы иметь возможность отправлять данные для объекта X
с вложенным полем из многих идентификаторов из таблицы Y
и создавать объект X
, получить только что созданный первичный ключ этого объекта X
и создать столько объектов XY
, сколько первичных ключей Y
было отправлено с первичным ключом этого объекта X
в качестве поля x_id
. ..
Я пробовал использовать RelatedField'ы, но в итоге получаю ошибку X model does not have n field
...
Каким будет наилучший подход для достижения этой функциональности при сохранении поддержки BrowsableAPI? Я знаю, что могу просто переопределить методы get()
и post()
моих классов представления, но должен быть лучший способ.
Спасибо