Python django查询返回错误:应为str实例,找到ValuesListQuerySet

Python django查询返回错误:应为str实例,找到ValuesListQuerySet,python,django,list,django-queryset,Python,Django,List,Django Queryset,我有一个脚本,它一个接一个地从动物列表中获取值,并用它们执行一些操作。它的工作原理如下: list_of_animals = ["Dog", "Cat", "Fish"] for x in list_of_animals: ... class MyModel(models.Model): animal = models.CharField(max_length=25, unique=True, error_messages= {'unique':"This animal is added al

我有一个脚本,它一个接一个地从动物列表中获取值,并用它们执行一些操作。它的工作原理如下:

list_of_animals = ["Dog", "Cat", "Fish"]
for x in list_of_animals:
...
class MyModel(models.Model):
animal = models.CharField(max_length=25, unique=True, error_messages=
{'unique':"This animal is added already."})
timestamp = models.DateTimeField()
list_of_animals = [MyModel.objects.values_list('title', flat=True)]
代码在这个列表上循环,一次一只动物,然后结束

现在,对于下一步,我有一个这样的模型:

list_of_animals = ["Dog", "Cat", "Fish"]
for x in list_of_animals:
...
class MyModel(models.Model):
animal = models.CharField(max_length=25, unique=True, error_messages=
{'unique':"This animal is added already."})
timestamp = models.DateTimeField()
list_of_animals = [MyModel.objects.values_list('title', flat=True)]
…还有SQLite数据库中更多的动物。所以我尝试用一个查询替换手动创建的动物列表

我试图更改动物列表,如下所示:

list_of_animals = ["Dog", "Cat", "Fish"]
for x in list_of_animals:
...
class MyModel(models.Model):
animal = models.CharField(max_length=25, unique=True, error_messages=
{'unique':"This animal is added already."})
timestamp = models.DateTimeField()
list_of_animals = [MyModel.objects.values_list('title', flat=True)]
但我得到了一个错误:

其实我也尝试了很多其他的方法,但都没有成功。 您能帮我找到一种方法,用一个工作方式相同的查询替换手动创建的列表吗

谢谢大家!

试试看:

list_of_animals = list(MyModel.objects.values_list('title', flat=True))
发件人:

请注意,此方法返回ValuesListQuerySet。这个类的行为 像一张单子。大多数时候这已经足够了,但是如果你需要 实际的pythonlist对象,您可以简单地在其上调用list,这 将评估查询集

尝试:

发件人:

请注意,此方法返回ValuesListQuerySet。这个类的行为 像一张单子。大多数时候这已经足够了,但是如果你需要 实际的pythonlist对象,您可以简单地在其上调用list,这 将评估查询集

不要做动物列表=[MyModel.objects.values\u list'title',flat=True],而是做

如果在单字段列表中使用flat=True,MyModel默认情况下将返回iterable列表,如中所述:

如果只传入单个字段,还可以传入展开参数。如果为True,则意味着返回的结果是单个值,而不是一个元组。举个例子可以让区别更清楚:

不要做动物列表=[MyModel.objects.values\u list'title',flat=True],而是做

如果在单字段列表中使用flat=True,MyModel默认情况下将返回iterable列表,如中所述:

如果只传入单个字段,还可以传入展开参数。如果为True,则意味着返回的结果是单个值,而不是一个元组。举个例子可以让区别更清楚:


亩無'除非你需要一份合适的清单,否则我的答案可能更好。是的,谢谢。似乎我需要的是一份合适的清单。它为我工作;亩無'除非你需要一份合适的清单,否则我的答案可能更好。是的,谢谢。似乎我需要的是一份合适的清单。它为我工作;谢谢,非常有教育意义的帖子!几乎为我完成了这项工作,我也为未来学习;谢谢,非常有教育意义的帖子!几乎为我完成了这项工作,我也为未来学习;