我有一个错误的问题我不太明白.. 当我执行下面的代码时,我得到以下消息:
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)
答案 0 :(得分:5)
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块:
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个值。第一个是模型,第二个是布尔值,如果创建了对象则为True,如果找到则为False。
get_or_create的文档:https://docs.djangoproject.com/en/dev/ref/models/querysets/#get-or-create