#python #django #python-3.x
#python #django #python-3.x
Вопрос:
Извините за запутанный вопрос, не уверен, как его правильно описать.
Допустим, у меня есть модель с именем News
, переменная news
будет использоваться для хранения результатов фильтрации непрочитанных News
с атрибутом read=False
и пометьте их news
на read=True
, затем верните их news
в template. Проблема в том, что после обновления read=True
исходная переменная, news
которая должна хранить исходное непрочитанное news
, станет пустой. Какие методы стоят за этим и как остановить эту синхронизацию?
Пример кода:
class News(models.Model):
...
read = models.BooleanField(default=False)
def foo(self):
news = News.object.filter(read=False) # get un-read news correctly
news.update(read=True) # update stored news successfully, but news will become empty
return news # return empty news instead of original filter result
Спасибо за ваши ответы.
Ответ №1:
Потому что наборы запросов являются ленивыми. Результаты не оцениваются до тех пор, пока вы фактически не выполните итерацию по набору запросов, что в вашем коде предположительно происходит в шаблоне.
Вы могли бы сначала преобразовать в список:
news_to_read = list(news)
news.update(read=True)
return news_to_read
но будьте осторожны, если вы используете разбивку на страницы, теперь вы оцениваете весь набор непрочитанных элементов, а не только значение одной страницы.
Комментарии:
1. Спасибо за ваш ответ и супер полезную ссылку, отлично решил мою проблему.