Каков правильный способ достижения просматриваемого 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() моих классов представления, но должен быть лучший способ.

Спасибо

Вернуться на верх