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__'
Пост метод передаю такие параметры
{ "app":"leads", "object":"Teacher", "settings":{ }, "data":{ } }
[ { "id": 1, "name": "John", "message": "Hi everyone", "status": "e3b86ed4-8794-413b-994c-b1ec0a43eebe" } ]
пробовал такое и оно работает
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 а оно должно быть универсальный для всех модели с дочерними обьектами
Помогите пожалуйста)