Я пытаюсь создать модель в Django, которая имеет отношение «многие ко многим» с другой моделью с дополнительными полями. Я использую остальную инфраструктуру для обеспечения CRUD-операций на них и у меня сценарий "курица-яйцо", я считаю ...
Проблема в том, что когда я иду в POST новый MainObject
, он выдает ошибку в части «многие ко многим» из-за отсутствия идентификатора MainObject
, на который можно указать. Но я хочу, чтобы это указывало на MainObject
, который я создаю, который не существует во время POST'ing. Я считаю, что это проблема с сериализаторами, но я не уверен, как ее решить. Я предполагаю, что мои предположения также могут быть неверными в том, как я формулирую данные POST.
Я использую Django 2.1.8
Код модели
class RelatedObject(models.Model):
...
class MainObject(models.Model):
related_objects = models.ManyToManyField(RelatedObject, through='ManyRelatedObject')
class ManyRelatedObject(models.Model):
main_object = models.ForeignKey(MainObject, on_delete=models.DO_NOTHING)
related_object = models.ForeignKey(RelatedObject, on_delete=models.DO_NOTHING)
other_attribute = models.BooleanField(...)
Код сериализатора
class ManyRelatedObjectSerializer(serializers.ModelSerializer):
main_object = serializers.PrimaryKeyRelatedField(queryset=MainObject.objects.all())
related_object = serializers.PrimaryKeyRelatedField(queryset=RelatedObject.objects.all())
class Meta:
model = ManyRelatedObject
fields = '__all__'
class MainObjectSerializer(serializers.ModelSerializer):
related_object = ManyRelatedObjectSerializer(many=True)
class Meta:
model = MainObject
fields = '__all__'
POST Полезная нагрузка
(Предполагается, что существует RelatedObject
с идентификатором 1)
{
"related_object": [
{
"related_object": 1,
"other_attribute": true
}
],
...
}
Ответ
{
"related_object": [
{
"main_object": [
"This field is required."
]
}
]
}
Ответ цели:
{
"id": 1,
"related_object": [
{
"main_object": 1,
"related_object": 1,
"other_attribute": true
}
],
...
}
Настройка конечной точки REST
class MainObjectViewSet(viewsets.ModelViewSet):
queryset = MainObject.objects.all()
serializer_class = MainObjectSerializer