2014-09-09 3 views
1

Так что я хочу создать метод в моем классе модели (я использую DetailView для представления), который возвращает предварительно утвержденный набор полей значения и удобные для пользователя имена, которые я могу вызвать в своем шаблоне. Этот метод должен проверить, не являются ли значения полей не стандартными значениями полей для каждого одобренного поля в модели, а затем возвращают список с парами значений полей/имени поля в мой шаблон.Итеративно извлечь значение поля экземпляра модели и значение по умолчанию, основанное на имени поля в Django 1.6

Проблема заключается в том, что я не могу найти способ извлечения field.value() и field.default, как показано в моем psuedocode ниже:

def displayFields(self): 
    approvedFields = [ ('field1','Field One'), 
         ('field2','Field Two'), 
         ('field3','Field Three') 
         ] 
    resultFieldPairs = [] 
    for fieldName in approvedFields: 
     field = self._meta.get_field_by_name(fieldName[0]) 
     if field.value() != field.default: 
      resultFieldPairs.append(tuple([fieldName[1], field.value()])) 
    return resultFieldPairs 

Я могу видеть из ошибок я получаю, что self._meta.get_field_by_name() возвращает СвязанныйObject, но документы Django не кажутся ясными относительно атрибутов и методов этого объекта.

Пожалуйста, помогите.

+0

Что ожидают получить от 'field.value()' делать вы имеете в виду 'getattr (self, field.name)' –

+0

Да, я просто не знал, что такое фактический код: P – user2667898

ответ

0

Я не знаю, как это хорошо для решения внутреннего атрибута _meta, как правило, не рекомендуется, НО - вы можете использовать

self._meta.get_field_by_name(fieldName[0])[0].default 

уведомление [0], потому что get_field_by_name возвращает кортеж в Django 1.6 с первым элементом в качестве самого объекта поля.

Чтобы получить значение этого поля для данного экземпляра используйте: getattr(self, fieldName[0])

Так что код будет выглядеть следующим образом:

for fieldName in approvedFields: 
     field = getattr(self, fieldName[0]) 
     if field != self._meta.get_field_by_name(fieldName[0]).default: 
      resultFieldPairs.append(tuple([fieldName[1], field])) 
+0

'AttributeError: объект 'int' не имеет атрибута 'default'' Так что теперь нам просто нужен способ для получения значения по умолчанию для поля. – user2667898

+0

Мне нужен код класса модели, чтобы понять его. Может быть, ваше поле не имеет значения по умолчанию? –

+0

Я получил путаницу, отредактировал мой ответ –

Смежные вопросы