многие поля не видны в _meta.fields - PullRequest
6 голосов
/ 20 декабря 2011

У меня есть универсальная функция, которая перебирает _meta.fields данного объекта. Все имена полей и значения выбираются правильно, за исключением полей ManyToMany. Кажется, он полностью игнорирует поля ManyToMany. Как мы получаем fks из m2m полей?

def myfunc(self)
    for field in self._meta.fields:
        type = field.get_internal_type()
        name = field.name
        val = getattr(self,field.name)

Ответы [ 2 ]

17 голосов
/ 20 декабря 2011

Они в self._meta.many_to_many

4 голосов
/ 27 марта 2017

Если вы хотите получить все имена полей в модели. Вам не нужно использовать self._meta.many_to_many + self._meta.fields.

Вы можете просто использовать [field.name for field in model._meta.get_fields()].

Обратите внимание, что get_fields вернет все поля (включая многие-ко-многим и внешний ключ)

Django get_fields:

def get_fields(self, include_parents=True, include_hidden=False):
    """
    Returns a list of fields associated to the model. By default, includes
    forward and reverse fields, fields derived from inheritance, but not
    hidden fields. The returned fields can be changed using the parameters:

    - include_parents: include fields derived from inheritance
    - include_hidden:  include fields that have a related_name that
                       starts with a "+"
    """
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...