В Django, как я могу создать экземпляр модели из строкового значения? - PullRequest
2 голосов
/ 12 июля 2011

Все,

У меня есть строки, которые представляют мою модель и поля, как это

modelNameStr = 'MyModel'
fieldNameStr = 'modelField'

Моя модель выглядит так:

class MyModel(models.Model):
    modelField = ForeignKey( ForeignModel )
    ...

Что я хочусделать, это создать экземпляр MyModel , используя строковые переменные, что-то вроде

model_instance = modelNameStr.objects.filter(fieldNameStr=ForeignModelInstance)

Как я могу это сделать?

Gath

Ответы [ 2 ]

4 голосов
/ 12 июля 2011
model_instance = ContentType.objects.get(app_label=u'someapp', model=modelNameStr).model_class()(**{fieldNameStr: ForeignModelInstance})

Фу!Попробуйте сказать , что пять раз быстрее!Но убедитесь, что вы используете соответствующее значение для app_label.

3 голосов
/ 12 июля 2011

Получив класс модели, вы можете использовать функцию get_model из Django.Хотя вы должны использовать строку типа my_app.MyModel, где «my_app» - это ваше приложение django, которое включает модель.Фильтрация значений полей может быть достигнута с помощью dict.Вот пример:

from django.db.models import get_model

modelNameStr = 'my_app.MyModel'
fieldNameStr = 'modelField'

ModelClass = get_model(*model_class.split('.'))
filters = {fieldNameStr: ForeignModelInstance}

model_instance = ModelClass.objects.filter(**filters)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...