Django 在一个序列化中拉出子对象

Django in one serialize pull out child objects

这是我的模型


class Dictionary(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    parentId = models.UUIDField(editable=True, null=True)
    name = models.CharField(max_length=100)
    date_create = models.DateTimeField(auto_now=True)
    date_end = models.DateTimeField(auto_now=False, null=True)


class Teacher(models.Model):
    name = models.CharField(max_length=100)
    message = models.CharField(max_length=300)
    status = models.OneToOneField(Dictionary, on_delete=models.CASCADE)

这是我的网址

from django.urls import path
from . import views
urlpatterns = [
    path('get', views.GetViewSet.as_view({'get': 'list'})),
    ]

这是视图集

class GetViewSet(viewsets.ModelViewSet):
    MyApiObj = null

    @property
    def api_object(self):
        return namedtuple("ApiObject", self.request.data.keys())(*self.request.data.values())

    def get_serializer_class(self):
        GeneralSerializer.Meta.model = apps.get_model(app_label=self.MyApiObj.app,  model_name=self.MyApiObj.object)
        return GeneralSerializer

    def post(self, request):
        self.MyApiObj = self.api_object
        return self.select_api()

    def select_api(self):
        queryset = QueryHelper.select(self.MyApiObj)
        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)

序列化器

class GeneralSerializer(serializers.ModelSerializer):
    class Meta:
        model = None
        fields = '__all__'

我的 post 参数到 django

{  
   "app":"leads",
   "object":"Teacher",
   "settings":{ 
   },
   "data":{  

   }
}

答案:

[
    {
        "id": 1,
        "name": "John",
        "message": "Hi everyone",
        "status": "e3b86ed4-8794-413b-994c-b1ec0a43eebe"
    }
]

问题是 Dictionary(status) 模型给我 id(uuid) 但我需要整个对象而不为 Dictionary 创建新的序列化程序。我为我的应用程序中的所有模型做通用序列化程序

试试这个:

class DictionarySerializer(serializers.ModelSerializer):
    class Meta:
        model = Dictionary
        fields = '__all__'


class GeneralSerializer(serializers.ModelSerializer):
    status = DictionarySerializer(required=True)
    class Meta:
        model = None
        fields = '__all__'

但这对我不利,因为 1) 没有其他序列化器 2) 我需要所有模型的通用序列化器以及项目所有模型中的子模型。请帮助我)

我需要这样的东西

[
    {
        "id": 1,
        "status": {
            "id": "e3b86ed4-8794-413b-994c-b1ec0a43eebe",
            "parentId": "dc6cf7da-b82c-11e9-a2a3-2a2ae2dbcce4",
            "name": "Spravochnik1",
            "date_create": "2019-08-06T09:30:49.355439Z",
            "date_end": "2019-08-06T09:29:57Z"
        },
        "name": "John",
        "message": "Hi everyone"
    }
]

对于嵌套序列化检查完整引用 here 并针对您的情况添加 depth = 1

class GeneralSerializer(serializers.ModelSerializer):
    status = DictionarySerializer(required=True)
    class Meta:
        model = None
        fields = '__all__'
        depth = 1