Django / Python, сделать функцию сохранения базы данных для повторного использования (чтобы она брала имя модели и имя приложения из строк), используя типы содержимого или какой-либо другой метод? - PullRequest
0 голосов
/ 07 сентября 2010

Я хочу создать некоторые функции, которые можно использовать в любой модели, чтобы я мог указать имя приложения и модель в строковом формате, а затем использовать это для импорта этой модели и выполнения вызовов, таких как создание полей базы данных, обновление,удаление и т.д ...

Я думал, что смогу сделать это, используя contenttypes в Django, но пытаюсь сделать это, как показано ниже, и получаю сообщение об ошибке "Объект ContentType не вызывается":

    from django.contrib.contenttypes.models import ContentType
    instancemodelname = ContentType.objects.get(app_label="myappname", model="mymodelname")

    b = instancemodelname(account_username='testtestest')
    b.save()
    >>>>'ContentType' object is not callable

Буду признателен за любые советы о том, как это сделать, спасибо

Ответы [ 2 ]

2 голосов
/ 07 сентября 2010

Будет работать следующий код:

instancemodelname = ContentType.objects.get(app_label="myappname", model="mymodelname")
b = instancemodelname.model_class()(account_username='testtestest')
b.save()

Тем не менее, я не совсем убежден, что типы контента - лучший способ достичь того, чего вы хотите.

1 голос
/ 07 сентября 2010

Не используйте модель ContentType. Для этого случая использования есть функция, которая не генерирует попадание в базу данных:

from django.db.models import get_model
mymodel = get_model("myappname", "mymodelname")
b = mymodel(account_username='testtestest')
b.save()
...