【问题标题】:How can i Edit/Change the value of a model field from views.py我如何从views.py编辑/更改模型字段的值
【发布时间】:2019-06-22 16:09:30
【问题描述】:

大家好。我想知道如何通过定义的会话列表中的项目数来更改模型字段的值

我已经制作了一个配置文件模型(这是用户模型的 OneToOne 字段) 在我的 models.py 中有一个“级别”字段,如下所示;

在 view.py 中,我创建了一个名为“answer_list”的会话,它是一个存储用户提供的所有正确答案的列表。

models.py

class UserProfile(models.Model):

    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')

    level = models.CharField(max_length=1, choices=[('Newbie', 'N'), ('Regular', 'R'), ('Expert', 'E')], default='Newbie')

views.py

def index(request):

     if 'answer_list' in request.session: #answer_list has been created previously #request.session['answer_list'] = []

        ok = request.session['answer_list']
        print (ok) #just to check the content of 'answer_list' which is correct

            if len(ok) == 4:

                user=request.user

                user.profile.level = 'R'
                user.profile.save()


    return render(request, 'index.html', {})

一旦会话“answer_list”中的项目数变为 4,我希望 user.profile.level 的值从“新手”更改为“常规”。请问我该怎么做

【问题讨论】:

  • 更新后您没有保存配置文件。
  • 您的问题是什么?您已经在编辑模型字段。但正如@DanielRoseman 所说,您不会像这样保存它:user.profile.save()
  • 我只是添加了 user.profile.save() 但模型字段的值没有改变

标签: django django-models django-views


【解决方案1】:

试试这个:

UserProfile.objects.filter(user=request.user).update(level='R')

【讨论】:

  • @jiaWie Lu ,试过了......我得到“UserProfile”对象没有属性“对象”错误
  • 抱歉输入错误,应该是“objects”而不是“object”。
  • UserProfile.object.filter(user=request.user).update(level='Regular' 工作正常...谢谢@JiaWie Lu
猜你喜欢
  • 2020-08-11
  • 2020-07-01
  • 1970-01-01
  • 2020-11-08
  • 1970-01-01
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多