问题描述
学习如何使用Django。 我正在尝试以下代码:
if form.is_valid() and form.has_changed():
try:
p = profile.objects.get(user_id= user.id)
#Append data to profile record
profile_record.save()
except p.DoesNotExist as e:
#Create new profile record
profile_record.save()
当找不到user_id
(FK字段)时,出现错误:
赋值之前引用的局部变量“ p”
我假设p = ...
是作业?
感谢您对我在这里做错的任何指示。
1楼
发生您的错误是因为在try部分中首先设置了p。 在except上,您引用p,但是此时尚未将p分配给任何东西,因为如果达到了except,则try部分将被“撤消”,这就是p的分配位置。
尝试将except p.DoesNotExist as e:
到except Person.DoesNotExist:
2楼
也许您可以使用get_or_create
p, created = profile.objects.get_or_create(user_id=user.id)
3楼
尝试过滤查询。应始终使用.get ,以防在查询时只有一个对象。
if form.is_valid() and form.has_changed():
p = profile.objects.filter(user_id = user.id)
if p:
p = p[0]
#Append data to profile record
profile_record.save()
else:
#Create new profile record
profile_record.save()
如果没有结果或超过1个结果,.get(field = something)将始终引发错误,而在这些情况下.filter()不会引发错误。
4楼
为什么不使用
if form.is_valid() and form.has_changed():
form.save()