gpt4 book ai didi

python - 创建模型对象时出现荒谬的 ValueError

转载 作者:行者123 更新时间:2023-11-28 22:03:18 29 4
gpt4 key购买 nike

我有一个我不太明白的错误问题..当我执行下面的代码时,我收到以下消息:

ValueError: Cannot assign "[<Location: somename>]": "Event.location" must be a "Location" instance.

它清楚地表明“somename”是 Location 类型,但提示它是错误的类型。我该怎么办?不幸的是,口译员没有给我很多提示:(

    if location is not None:
location = location.group(1)
l=Location.objects.filter(name=location)
if not l:
l = Location(name=location)
l.save()

if price is not None:
price = price.group(1)

if starttime is not None:
starttime = extract_time_from_string(starttime.group(1))

if name is not None:
name = name.group(1)

if edate is not None and name is not None and l is not None:
if not Event.objects.filter(name = name, eventdate=edate,
location = l):
e= Event(location = l, name = name,
eventdate=edate, starttime=starttime,
price=price)

最佳答案

ValueError: Cannot assign "[<Location: somename>]": "Event.location" must be a "Location" instance.

当它说 [<Location: somename>]已通过,括号表示它是一个列表。

问题是 l变量在您的代码中可以有不同的类型。

这里是Location的QuerySet(列表兼容类型):

l=Location.objects.filter(name=location)

这是一个位置:

l = Location(name=location)

您应该确保 l在这两种情况下都包含一个位置,例如,这个 else block :

    l=Location.objects.filter(name=location)
if not l:
l = Location(name=location)
l.save()
else:
l = l[0]

当您尝试获取一个位置实例时,您不妨使用 get()而不是 filter() :

try:
l = Location.objects.get(name=location)
except Location.DoesNotExist:
l = Location(name=location)
l.save()

这基本上就是 get_or_create() 的作用方法:

l, created = Location.objects.get_or_create(name=location)

使用 get_or_create() 时需要注意的一个常见陷阱是它返回 2 个值。第一个是模型,第二个是 bool 值,如果创建了对象则为 True,如果找到则为 False。

get_or_create 的文档:https://docs.djangoproject.com/en/dev/ref/models/querysets/#get-or-create

关于python - 创建模型对象时出现荒谬的 ValueError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9419399/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com