在Django中从数据库内容为变量赋值

0 投票
2 回答
562 浏览
提问于 2025-04-17 17:17

你好,我有一个函数,它从数据库中获取一个字段的值,这个值可能是四个值中的一个。根据这个值,我需要显示一些数据。

update_grp = User_Groups.objects.get(user_id=request.user.id)
    showopen = update_grp.profilegroup
    if showopen == "trendy":
      slidercategory = Category.objects.get(id = 65)
    elif showopen == "Classic":
      slidercategory = Category.objects.get(id = 63)
    elif showopen == "Glam":
      slidercategory = Category.objects.get(id = 81)
    elif showopen == "Bohemian":
      slidercategory = Category.objects.get(id = 62)
    sliderproduct = slidercategory.product_set.all()  

但是我遇到了以下错误。

local variable 'slidercategory' referenced before assignment

请告诉我我哪里做错了。

2 个回答

0

你缺少一个'else'语句,这样解释器就会认为在你的函数中可能有一种情况是'slidercategory'不可用(也就是没有任何一个if条件被满足)。

你可以添加一个else语句,或者在函数的开头给sliderproduct赋一个默认值'somedefaultvalue'。另一种解决办法是把返回值放到if语句的范围内,这样当没有任何if条件被满足时,就会返回None。

>>> def test(foo):
...     if foo == 2:
...        bar = 'hello'
...     elif foo == 3:
...        bar = 'goodbye'
...     return bar
>>> test(2)
>>> 'hello'
>>> test(1)
UnboundLocalError: local variable 'bar' referenced before assignment
1

你的 showopen 变量不在你代码提供的四个选项里面。如果你没有调试工具来查看这个变量的实际值,那就可以在代码里加一些打印语句,把这个变量的值打印到控制台上。

update_grp = User_Groups.objects.get(user_id=request.user.id)
    showopen = update_grp.profilegroup
    print showopen
    #..

撰写回答