当前位置: 代码迷 >> python >> Django-根据查询更新或插入
  详细解决方案

Django-根据查询更新或插入

热度:59   发布时间:2023-06-13 14:16:24.0

学习如何使用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 = ...是作业?

感谢您对我在这里做错的任何指示。

发生您的错误是因为在try部分中首先设置了p。 在except上,您引用p,但是此时尚未将p分配给任何东西,因为如果达到了except,则try部分将被“撤消”,这就是p的分配位置。

尝试将except p.DoesNotExist as e:except Person.DoesNotExist:

也许您可以使用get_or_create

p, created = profile.objects.get_or_create(user_id=user.id)

尝试过滤查询。应始终使用.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()不会引发错误。

为什么不使用

if form.is_valid() and form.has_changed():
    form.save()