Я использую get_fields (), чтобы получить подсказку всех имен и значений полей модели:
def get_model_fields(self, obj, fields):
model_fields = {}
for f in self.model._meta.get_fields(include_hidden=True):
value = getattr(obj, f.name)
model_fields.append({
'label': f.verbose_name
'name': f.name,
'help_text': f.help_text,
'value': value,
'class': str(f.__class__)})
return model_fields
Это хорошо работает, за исключением полей ManyToMany, где label
, name
, help_text
и class
все отображаются нормально, но значение возвращается [modelname].None
, несмотря на то, что оно содержит значения.
Например:
models.py
class MyModel(models.Model):
m2m_field = models.ManyToManyField(...)
char_field = models.CharField()
просмотров .py
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
view_data = []
view_data = get_model_fields(self, context['object'], self.fields)
context['view_data'] = view_data
return context
шаблон. html
{% for f in view_data %}
{{f.label}}
{{f.value}}
{% endfor %}
Это вернет метку и значение правильно для char_field
, но только метку для m2m_field
и значение как MyModel.None
.
Как добавить значения поля ManyToMany к этой функции?