Awk может согласовать вывод для предоставления, что попросил корреспондент. На моем Солярисе 10 систем найдите, что-ls печатает размер в КБ как второе поле, таким образом:
% find . -name '*.ear' -ls | awk '{print $2, $11}'
5400 ./dir1/dir2/earFile2.ear
5400 ./dir1/dir2/earFile3.ear
5400 ./dir1/dir2/earFile1.ear
Иначе, используйте - должностное лицо ls - люфтганза и выберите поле размера от вывода. Снова на Солярисе 10:
% find . -name '*.ear' -exec ls -lh {} \; | awk '{print $5, $9}'
5.3M ./dir1/dir2/earFile2.ear
5.3M ./dir1/dir2/earFile3.ear
5.3M ./dir1/dir2/earFile1.ear
Причина, по которой вы не видите эти значения в своем шаблоне, заключается в том, что каждый раз, когда вы вызываете car.meter_set.all ()
, вы получаете совершенно новый набор запросов прямо из базы данных.
Экземпляры модели Django не имеют идентичности, поэтому, хотя объекты Meter
в одном наборе запросов имеют те же значения базы данных, что и в другом, они не имеют общих динамических атрибутов.
Один из способов сделать это - кэшировать объекты Meter в каждом автомобиле, как я показываю здесь в недавнем вопросе. Затем вместо ссылки на car.meter_set.all ()
в представлении, модели и шаблоне вы должны сделать car.get_meters ()
или что-то еще, и вы получите тот же набор объектов каждый раз вместе с вашими динамическими атрибутами.
Я пробовал нечто подобное в своем собственном коде, и похоже, что проблема, с которой вы столкнулись, возникает в методе read_meter ()
и odomoter ()
вид.
Объекты meter
и car
, которые вы используете для итерации по QuerySets, выпадают из области видимости, и изменения, которые вы вносите в их атрибуты идут с ними.
Когда вы показываете метр. разница и meter.changed в шаблоне, Django воссоздает эти объекты из базы данных (и без несохраненных значений атрибутов).
Надеюсь, что объяснение понятно. Есть ли причина не сохранять значения в БД?