django编辑queryset对象而不影响数据库

时间:2013-09-11 21:33:08

标签: python django

我还没有找到足够好的答案,所以我在这里问。我有分红和股票的模型。

class Dividend(models.Model):
    attributes...
    stock = models.ForeignKey(Stock)

我需要创建Queryset的副本,因为我想将带有一些额外值的股息传递给我的模板,我不希望将这些额外的值插入到数据库中。

dividend_set = stock.dividend_set.all().order_by('date')
dividend_set.create(...)

我该怎么做?上面的代码将在我的stock.dividend_set中创建数据。我是否必须使用deepcopy或将queryset转换为列表?还是有更优雅的方式?

1 个答案:

答案 0 :(得分:4)

一种简单的方法是将查询集转换为列表。该列表将包含模型的实例。您可以对这些实例执行任何操作,除非您调用save或其他一种写入数据库的方法,否则不会将任何内容保存到数据库中。

dividend_set = stock.dividend_set.all().order_by('date')
dividends = list(dividend_set)
for dividend in dividends:
    dividend.extra_value1 = 'foo'
    dividend.extra_value2 = 'bar'
# now pass the dividends list to your template as part of your context rather than the qs