rvinzent / django-dynamic-models

Dynamic Django models allow users to define, edit, and populate their own database schema.
MIT License
154 stars 46 forks source link

How to use ModelSchema to create a dynamic model based from a exist Abstract Model? #72

Open ramwin opened 10 months ago

ramwin commented 10 months ago

Here is my scenario:

I want to create task table for every user, since each user may add this own dynamic fields.

def create_task_list(request):
    schema = ModelSchema.objects.create(name=f"task_{request.user.id}")
    # create common fields
    FieldSchema.objects.create(model_schema=schema, name="status", data_type="character")
    ...also create common fields like create_datetime, user, update_datetime...
    # create user fields
    for field in request.POST['fields']:
        ...

How can I create an abstract model like

class TaskModel:
    status = models.CharField()
    create_datetime = models.DateTimeField(auto_now_add=True)
    update_datetime = models.DateTimeField(auto_now=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

and use this model as a baseclass to create dynamic model like:

def create_task_list(request):
    schema = ModelSchema.objects.create(name=f"task_{request.user.id}", base_model=TaskModel)

    # create user fields
    for field in request.POST['fields']:
        ...
ramwin commented 10 months ago

I reviewed the source code of dynamic-models, the factor will use the config.default_fields, but this will change behaviour for all dynamic models. But I only want the user's personal task to inherate TaskModel.