У меня есть два документа mongoengine модели как:
from mongoengine import *
class Doc1(Document):
doc1_field1 = StringField(max_length=100)
doc1_field2 = StringField(max_length=100)
class Doc2(Document):
doc2_field1 = ReferenceField(Doc1)
doc2_field2 = StringField(max_length=100)
in serializers.py :
from rest_framework_mongoengine import serializers
from .models import Doc1, Doc2
class Doc1Serializer(serializers.DocumentSerializer):
class Meta:
model = Doc1
fields = '__all__'
class Doc2Serializer(serializers.DocumentSerializer):
doc2_field1 = Doc1Serializer()
class Meta:
model = Doc2
fields = ('doc2_field1', 'doc2_field2')
views.py
from rest_framework_mongoengine import viewsets
from .models import Doc2
from .serializers import Doc2Serializer
class Doc2ViewSet(viewsets.ModelViewSet):
lookup_field = 'pk'
serializer_class = Doc2Serializer
def get_queryset(self):
return Doc2.objects.all()
То, чего я пытаюсь достичь, это когда я делаю GET запрос, doc2_field1
должен быть разыменован на основе Doc1Serializer
, и это это на самом деле так прямо сейчас. Проблема в том, что я пытаюсь PUT / PATCH doc2_field1
с новой ссылкой ObjectID, как определено в models.py
. Вот где я получаю следующее:
"non_field_errors": [
"Неверные данные. Ожидается словарь, но есть ул."
]
Таким образом, мой вопрос, есть ли способ получить разыменованное поле в GET
, но разрешить ссылки на объекты в PUT/PATCH
.
ОЖИДАЕТСЯ:
GET:
{
"doc2_field1": {
"doc1_field1": "Text Value 1",
"doc1_field2": "Text Value 2"
},
"doc2_field2": "Text Value"
}
PUT / PATCH:
{
"doc2_field1": "5ae1a104e35e8620801798f3"
"doc2_field2": "Text Value"
}