2010-09-07 2 views
0

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

я думал, что я мог бы сделать это с помощью 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

Следующие co de будет работать:

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

Это говорит, что я не совсем уверен, что contenttypes - это лучший способ добиться того, чего вы хотите.

+0

спасибо, я не уверен, что это лучший способ, как ... Я был бы признателен за советы по любым другим методам, как это будет быть полезным также для контекста вне Django в будущем – Rick

+0

ваш ответ на месте, поэтому я уже выбрал его как правильное, однако было бы интересно, как альтернативные способы сделать это, чтобы я мог изучить его дальше, чтобы лучше улучшите мои знания такого рода вещей – Rick

+0

Один из способов сделать это - написать функцию (ы) для импорта модели во время выполнения, а затем создать экземпляры и т. д. Сохраните функцию в служебном пакете. –

1

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^