Как получить объекты из ManyToManyRel - PullRequest
0 голосов
/ 15 января 2020

Я использую get_fields на модели, которая возвращает все поля, включая ManyToManyRel:

field_list = self.model._meta.get_fields(include_hidden=True)

Результаты:

field list: (<ManyToManyRel: books.book>, <django.db.models.fields.CharField>)

Я использую эту функцию для построения список полей, которые я могу передать context и отобразить в виде:

def get_model_fields(self, obj, fields):
    model_fields = []

    # for f in self.model._meta.fields:
    for f in self.model._meta.get_fields(include_hidden=True):

        # resolve picklists/choices, with get_xyz_display() function
        get_choice = 'get_' + f.name + '_display'
        if hasattr(obj, get_choice):
            value = getattr(obj, get_choice)()
        else:
            try:
                value = getattr(obj, f.name)
            except AttributeError:
                value = None

        # Display blank values in DetailView
        if value == '':
            value = None

        if f.name in fields:

            model_fields.append(
                {
                    'label': f.verbose_name,
                    'name': f.name,
                    'help_text': f.help_text,
                    'value': value,
                    'class': str(f.__class__)
                }
            )

    return model_fields

Это хорошо работает для всех конкретных полей. Однако ManyToManyRel не имеет значения, не может быть повторен. Вместо этого для этих типов полей я хочу добавить простой объединенный список объектов M2M как str результат в значение.

Если бы это был объект, я бы сделал что-то вроде:

    my_list = []
    for obj in self.MyModel_set.all():
        my_list.append(obj)
    return ', '.join(my_list)

Как я могу сделать это, управляя ManyToManyRel?

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