【问题标题】:NameError name 'F' is not definedNameError 名称“F”未定义
【发布时间】:2022-06-11 11:41:06
【问题描述】:

当我在用户填写一项调查后尝试使用此代码为用户添加 10 分时,它显示此错误

但是,我遇到了问题。我得到了错误:

models.py", line 22, in give_coins
user.coins = F('coins') + count
NameError: name 'F' is not defined

models.py

class User(AbstractUser):
    user_pic = models.ImageField(upload_to='img/',default="",null=True, blank=True)
    coins = models.IntegerField(default=10)
    def get_image(self):
        if self.user_pic and hasattr(self.user_pic, 'url'):
            return self.user_pic.url
        else:
            return '/path/to/default/image'
    def give_coins(user, count):
        user.coins = F('coins') + count
        user.save(update_fields=('coins',))
        user.refresh_from_db(fields=('coins',))

views.py:

@require_http_methods(["POST"])
def submit_survey(request):
    request.user.give_coins(count=10)
    form_data = request.POST.copy()
    form_items = list(form_data.items())
    print("form_items", form_items)
    form_items.pop(0)  # the first element is the csrf token. Therefore omit it.
    survey = None
    for item in form_items:
        # Here in 'choice/3', '3' is '<choice_id>'.
        choice_str, choice_id = item
        choice_id = int(choice_id.split('/')[1])
        choice = Choice.objects.get(id=choice_id)
        if survey is None:
            survey = choice.question.survey
        choice.votes = choice.votes + 1
        choice.save()
    if survey is not None:
        participant = Participant(survey=survey, participation_datetime=timezone.now())
        participant.save()
    return redirect('/submit_success/')

所以..这里的错误在哪里

【问题讨论】:

  • 错误来自您的用户模型,因为您没有使用 F 定义任何属性,因此 Django 会在您的这部分代码中抛出错误 *def give_coins(user, count): user.硬币 = F('硬币') + 计数
  • 好的,我现在明白你的意思了,那么你建议我做什么来解决这些问题?
  • 使用前需要导入类...from django.db.models import F
  • 是的,你应该在哪里导入 F 然后它应该可以工作
  • 哦,真的谢谢伙计,我是 django 的新手,现在我正在了解有关 django 的更多信息,你帮助我了解了 django 中的模型

标签: django django-models django-rest-framework django-views


【解决方案1】:

"models.py"中导入"F"如下图:

from django.db.models import F

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 2019-01-26
    • 2021-10-05
    • 2017-08-16
    相关资源
    最近更新 更多