Я использую 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
?