学习如何使用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 = ...
是作业?
感谢您提出我在这里做错的任何指示。
答案 0 :(得分:3)
您的错误正在发生,因为在try部分中首先设置了p。在on上,你引用p,但是p还没有被指定给那个点上的任何东西,因为如果达到了except,那么try部分是“撤消”,那就是指定p的位置。
尝试将except p.DoesNotExist as e:
更改为except Person.DoesNotExist:
答案 1 :(得分:1)
也许您可以使用get_or_create
https://docs.djangoproject.com/en/1.8/ref/models/querysets/#django.db.models.query.QuerySet.get_or_create
p, created = profile.objects.get_or_create(user_id=user.id)
答案 2 :(得分:0)
尝试过滤查询.. .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()在这些情况下不会抛出错误。
答案 3 :(得分:0)
为什么不使用
if form.is_valid() and form.has_changed():
form.save()