Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 6, 2019 18:19:29

aliarystan
Зарегистрирован: 2019-08-06
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Serializer

Есть такие модели

 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)
Есть такой urls

 from django.urls import path
from . import views
urlpatterns = [
    path('get', views.GetViewSet.as_view({'get': 'list'})),
    ]
Есть такой ViewSet

 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)
Serializer такой

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

Пост метод передаю такие параметры

 {  
   "app":"leads",
   "object":"Teacher",
   "settings":{ 
   },
   "data":{  
   }
}
ответ вот это

 [
    {
        "id": 1,
        "name": "John",
        "message": "Hi everyone",
        "status": "e3b86ed4-8794-413b-994c-b1ec0a43eebe"
    }
]
Проблема в том что мне нужно дочерний класс Dictionary(status) в Teacher вытащить не 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 Не только для модели dictionary а оно должно быть универсальный для всех модели с дочерними обьектами

Помогите пожалуйста)

Отредактировано aliarystan (Авг. 6, 2019 18:22:13)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version