Есть ли программный c способ доступа к списку всех «наборов» в модели? - PullRequest
2 голосов
/ 09 марта 2020

У меня есть три модели

class Risk(models.Model):
   notes = models.TextField()
   ...

class Component(models.Model):
   risk = models.ManyToManyField(Risk)
   ...

class ReportComponent(models.Model):
   risk = models.ManyToManyField(Risk)
   ...

И сейчас я делаю следующее:

def parent_component(self):
    print(self.component_set.all())
    print(self.reportcomponent_set.all())

Есть ли способ динамической проверки всех доступных ..._set свойств?

1 Ответ

0 голосов
/ 09 марта 2020

Вы можете получить список всех полей с помощью self._meta.get_fields(). Затем вы можете начать фильтрацию этих полей. Затем мы можем обработать их, проверив, сохраняется ли для этого поля f свойство f.many_to_many. Кроме того, мы можем использовать f.get_accessor_name() для получения доступа.

def parent_component(self):
    for f in self._meta.get_fields():
        if <b>f.many_to_many</b>:
            print(getattr(self, <b>f.get_accessor_name()</b>).all())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...