Как найти все модели, имеющие отношение к конкретной модели с формой Джанго? - PullRequest
1 голос
/ 25 июля 2011

Мне нужно объединить два экземпляра модели, и процесс, который мне нужно пройти, довольно прост. Там нет много, если какие-либо нормализованные данные в системе. Чтобы объединить эти два, мне просто нужно объединить данные и установить соответствующие foreign_keys для всех связанных моделей.

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

Кроме того, ряд ссылок на эту корневую модель будет осуществляться через общие внешние ключи. Однако я предполагаю, что поиск моделей, ссылающихся на корневой объект, будет работать при поиске моделей, связанных с моделью ContentTypes.

1 Ответ

1 голос
/ 26 июля 2011

Возможно, вы сможете осуществить это с помощью самоанализа, но вы тесно связываете свои модели с реализацией Django, что может быть опасно. Если вам это хорошо, вы можете сделать что-то вроде:

class MyModel(models.Model):
    ## Definitions
    @property
    def related(self):
        related = []
        for attr in dir(self):
            try:
                ## Get the class name.
                attr_type = type(bf.__getattribute__(attr)).__name__
                ## This is an internal type tucked away in:
                ##     django/db/models/fields/related.py
                ##   As best I can tell, this is only used for reverse
                ##   relationships.
                if attr_type == "RelatedManager":
                    related.extend(bf.__getattribute__(attr).all())
            except:
                ## Some of the built in methods / properties throw errors,
                ##   skip them.
                pass
        return related

Возможно, это не лучшее решение, но похоже, что оно работает при тестировании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...