Как анализировать django образцовые поля?

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

Я могу загрузить модель динамично:

from django.db import models
model = models.get_model('myapp','mymodel')

Теперь у меня есть поле - 'myfield' - как я могу получить класс того поля?

Если поле является реляционным - как получить смежную область?

Огромное спасибо!

35
задан Evgeny 5 March 2010 в 03:45
поделиться

1 ответ

Вы можете использовать атрибут _meta модели для получения объекта поля, а из поля вы можете получить отношения и многое другое, например, рассмотрим таблицу employee, которая имеет внешний ключ к таблице department

In [1]: from django.db import models

In [2]: model = models.get_model('timeapp', 'Employee')

In [3]: dep_field = model._meta.get_field_by_name('department')

In [4]: dep_field[0].target_field
Out[4]: 'id'

In [5]: dep_field[0].related_model
Out[5]: <class 'timesite.timeapp.models.Department'>

from django/db/models/options.py

def get_field_by_name(self, name):
    """
    Returns the (field_object, model, direct, m2m), where field_object is
    the Field instance for the given name, model is the model containing
    this field (None for local fields), direct is True if the field exists
    on this model, and m2m is True for many-to-many relations. When
    'direct' is False, 'field_object' is the corresponding RelatedObject
    for this field (since the field doesn't have an instance associated
    with it).

    Uses a cache internally, so after the first access, this is very fast.
    """
73
ответ дан 27 November 2019 в 06:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: