Try this i am not so sure though but trying isn't bad...kindly give me the
feedback after trying


from django.apps import apps
from django.db import connection, models
from rest_framework.response import Response
from rest_framework.views import APIView

FIELD_TYPE_MAPPING = {
    'char': models.CharField,
    'integer': models.IntegerField,
    'boolean': models.BooleanField,
    'email': models.EmailField,
    # Add more field types here if needed
}

class CreateTableAPIView(APIView):
    def post(self, request):
        serializer = CreateTableSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)

        table_name = serializer.validated_data['table_name']
        fields = serializer.validated_data['fields']

        # Create a dynamic model class
        dynamic_model_attrs = {'__module__': __name__}
        for field in fields:
            field_name = field['name']
            field_type = field['type']
            max_length = field.get('max_length', 255)

            if field_type in FIELD_TYPE_MAPPING:
                field_class =
FIELD_TYPE_MAPPING[field_type](max_length=max_length)
            else:
                raise ValueError(f"Invalid field type: {field_type}")

            dynamic_model_attrs[field_name] = field_class

        dynamic_model = type(table_name, (models.Model,),
dynamic_model_attrs)

        # Create the database table for the dynamic model
        with connection.schema_editor() as schema_editor:
            schema_editor.create_model(dynamic_model)

        # Register the dynamic model with the app
        apps.all_models['dynamic_tables_app'][table_name] = dynamic_model

        return Response(f'Table "{table_name}" created successfully!')


On Mon, May 22, 2023 at 8:21 AM Helly Modi <[email protected]> wrote:

> This is my code and it worked in creating tables but here django provides
> 26 fields and many relation how can i include all ? If else become too
> complex .Is there any other way to do this
>
> On Mon, May 22, 2023 at 10:49 AM Helly Modi <[email protected]> wrote:
>
>> class CreateTableAPIView(APIView):
>>     def post(self, request):
>>         serializer = CreateTableSerializer(data=request.data)
>>         serializer.is_valid(raise_exception=True)
>>
>>         table_name = serializer.validated_data['table_name']
>>         fields = serializer.validated_data['fields']
>>
>>         # Create a dynamic model class
>>         dynamic_model_attrs = {'__module__': __name__}
>>         for field in fields:
>>             field_name=field['name']
>>             field_type=field['type']
>>             max_length=field.get('max_length',255)
>>
>>             if field_type=='char':
>>                 field_class=models.CharField(max_length=max_length)
>>             elif field_type== 'integer':
>>                 field_class=models.IntegerField()
>>             elif field_type=='boolean':
>>                 field_class=models.BooleanField()
>>             else:
>>                 field_class=models.EmailField()
>>             dynamic_model_attrs[field_name]=field_class
>>
>>
>>         dynamic_model = type(table_name, (models.Model,), 
>> dynamic_model_attrs)
>>
>>         # Create the database table for the dynamic model
>>         with connection.schema_editor() as schema_editor:
>>             schema_editor.create_model(dynamic_model)
>>
>>         # Register the dynamic model with the app
>>         apps.all_models['dynamic_tables_app'][table_name] = dynamic_model
>>
>>         return Response(f'Table "{table_name}" created successfully!')
>>
>>
>> On Fri, May 19, 2023 at 6:40 PM Brian Gitau <[email protected]>
>> wrote:
>>
>>> which code do you have or you want the code example explaining
>>> everything?
>>>
>>>
>>> On Fri, May 19, 2023 at 3:59 PM Helly Modi <[email protected]>
>>> wrote:
>>>
>>>> How to create dynamic models in django rest framework?
>>>>
>>>> Is there any chance to create dynamic models with APIs
>>>>
>>>>
>>>>
>>>> Any examples please send me thanks in advance..
>>>>
>>>>
>>>>
>>>> 1) Requirement is need create table name and fields in frontend
>>>>
>>>> 2) we are  getting the data and store in to the db create db structure
>>>>
>>>> 3) get the table name and fields create table in backend &postgresql
>>>> store to
>>>>
>>>> 4)this code don't update or add into the models
>>>>
>>>> 5)store the data into the tables
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Django users" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/django-users/72d09483-5129-43e1-bdbb-7b92969d97c4n%40googlegroups.com
>>>> <https://groups.google.com/d/msgid/django-users/72d09483-5129-43e1-bdbb-7b92969d97c4n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Django users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/django-users/CAMJ3z%3D3Qn0n%2BHVefJg_B6R9RQABA88C4whqbn0g3ygo4k0gkMw%40mail.gmail.com
>>> <https://groups.google.com/d/msgid/django-users/CAMJ3z%3D3Qn0n%2BHVefJg_B6R9RQABA88C4whqbn0g3ygo4k0gkMw%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-users/CAO-ToNUai69i86uMD6-Z%2BSZha9DpjHSSbNFBGcwpf19N4eEtnw%40mail.gmail.com
> <https://groups.google.com/d/msgid/django-users/CAO-ToNUai69i86uMD6-Z%2BSZha9DpjHSSbNFBGcwpf19N4eEtnw%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/CAMJ3z%3D0LoJKsZfk_4XD0zmCQ2F_Jwc2_Ex9CE24L74Q4P%2BobTQ%40mail.gmail.com.

Reply via email to