Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django编辑queryset对象而不影响数据库_Python_Django - Fatal编程技术网

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

Python django编辑queryset对象而不影响数据库,python,django,Python,Django,我还没有找到足够好的答案,所以我在这里问。我有股息和股票的模型 class Dividend(models.Model): attributes... stock = models.ForeignKey(Stock) 我需要创建Queryset的一个副本,因为我想将带有一些额外值的红利传递给我的模板,并且我不想将这些额外值插入数据库 dividend_set = stock.dividend_set.all().order_by('date') dividend_set.cre

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

class Dividend(models.Model):
    attributes...
    stock = models.ForeignKey(Stock)
我需要创建Queryset的一个副本,因为我想将带有一些额外值的红利传递给我的模板,并且我不想将这些额外值插入数据库

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

我该怎么做?上面的代码将在我的stock.u集合中创建数据。我必须使用deepcopy还是将queryset转换为list?或者还有更优雅的方法吗?

一个简单的方法是将查询集转换为列表。该列表将包含模型的实例。您可以对这些实例执行任何操作,除非调用
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

一个简单的方法是将查询集转换为列表。该列表将包含模型的实例。您可以对这些实例执行任何操作,除非调用
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

我已经读过这个名单。但是djangoproject.com说它可能会有
大的内存开销
。我没有多少红利,所以我可以用它。但我认为在不保存对象的情况下使用对象会有更优雅的方式。谢谢你的回答!嗯,如果你想改变它们,你的对象必须在某个时候进入内存。在呈现模板时,它们可能已经被拉入内存。例如,如果模板在查询集上包含一个
for
循环,Django将以与
list
构造函数完全相同的方式将整个查询集拉入内存。但是djangoproject.com说它可能会有
大的内存开销
。我没有多少红利,所以我可以用它。但我认为在不保存对象的情况下使用对象会有更优雅的方式。谢谢你的回答!嗯,如果你想改变它们,你的对象必须在某个时候进入内存。在呈现模板时,它们可能已经被拉入内存。例如,如果模板在queryset上包含一个
for
循环,Django将以与
列表
构造函数完全相同的方式将整个queryset拉入内存。