Folks
Скорее всего, я делаю глупую ошибку.
У меня есть модель с именем Comment - обычная модель, за исключением того, что я хочу сохранить массив внутри модели (массив не хранится в БД).
Теперь мой код выглядит примерно так:
class Comment(model.Model):
# regular attributes such as id etc.
#...
attachments = [] # the attribute I would populate separately
# later...
comments = Comment.objects.filter(...)
comment_attachments_arr = [some array initialized from db separately]
# set the attribute after retrieving from the db
for c in comments:
comment_attachments_arr = comment_attachments.get(c.id)
del c.attachments[:] # reset the attachments array
if comment_attachments_arr:
c.attachments.extend(comment_attachments_arr)
print 'INSIDE for comment id: %s, comment attachments: %s' %( c.id, c.attachments)
for c in comments:
print 'OUTSIDE for comment id: %s, Comment attachments: %s\n' %( c.id, c.attachments)
Моя проблема заключается в том, что печать во втором последнем цикле for показывает правильное значение для c.attachments, тогда как печать внутри последующего цикла for показывает пустое значение для той же записи. Это неожиданно, поскольку оба цикла находятся над одним и тем же массивом комментариев!
Я, скорее всего, упускаю что-то очевидное и глупое - если кто-то может определить проблему, пожалуйста, ответьте.
Thanx!
- Обновление:
@ Анураг
Ваше предложение, похоже, не работает. Кажется, на самом деле это не интуитивно понятно, если зацикливание набора запросов приводит к другому запросу - возможно, django всегда хочет получать последние данные.
В любом случае, я попробовал следующее:
comments_list = list(comments)
for c in comments_list:
comment_attachments_arr = comment_attachments.get(c.id)
del c.attachments[:] # clear the attachments array
print 'BEFORE INSIDE for comment id: %s, comment attachments: %s' %( c.id, c.attachments)
if comment_attachments_arr:
c.attachments.extend(comment_attachments_arr)
print 'INSIDE for comment id: %s, comment attachments: %s' %( c.id, c.attachments)
print '\n\nFINAL comment attachments ---'
for c in comments_list:
print 'OUTSIDE for comment id: %s, Comment attachments: %s\n' %( c.id, c.attachments)
Обновление 2:
Я не совсем уверен, почему, но это работает, если я подставляю строку
del c.attachments[:]
с
c.attachments = []
Я не могу ответить этим ответом до 8 часов ..