无法用新数据保存用户模型

问题描述 投票:0回答:1

Django 4.2.5,python 3.11,保存到mysql数据库。

我正在尝试更新“Teacher”模型的“chat_user_status”字段,该字段扩展了抽象用户模型。

Model.py 教师代码:

class TeacherProfile(models.Model):
    teacher = models.OneToOneField(
        UserProfile, related_name='teacher', primary_key=True, parent_link=True, on_delete=models.CASCADE)
    chat_user_status = models.BooleanField(default=False, verbose_name='Chat Status')

    def save(self, *args, **kwargs):
            identity = self.teacher.email
            friendlyName = self.teacher.first_name + \
                ' ' + self.teacher.last_name
    
            super(TeacherProfile, self).save(*args, **kwargs)

Views.py(教师模型)尝试更新chat_user_status字段的登录代码,但没有任何更新,也没有错误:

def login_user(request):
    logout(request)
    email = password = ''

    if request.POST:
        email = request.POST['email']
        password = request.POST['password']

        user = authenticate(username=email, password=password)
        if user is not None:
            if user.is_active:
                login(request, user)
                if is_teacher(user):
                    user.chat_user_status=True
                    user.save()

Views.py我的聊天应用程序中尝试保存数据的相关代码

def update_chatuser_status(uid):
    user_profile = UserProfile.objects.get(id=uid)
    teacher_profile = None

    try:
        teacher_profile = TeacherProfile.objects.get(teacher_id=user_profile.id)
    except:
        pass

    if teacher_profile != None:
        teacher_profile['chat_user_status']=False
        teacher_profile.save()

调用 save() 后,“chat_user_status”字段没有变化。 没有错误消息。 我搜索了其他答案,要么不起作用,要么不相关。

django django-users
1个回答
0
投票

据我了解,您有两个单独的错误导致该字段未更新。

login_user()
中,您正在操作不具有字段
UserProfile
chat_user_status
对象。您需要访问连接的
TeacherProfile
并使用新属性保存它:

if is_teacher(user):
    user.teacherprofile.chat_user_status=True
    user.teacherprofile.save()

update_chatuser_status
中,您像字典键一样访问该属性,但这不起作用。相反,您应该像这样访问该字段:

if teacher_profile != None:
        teacher_profile.chat_user_status=False
        teacher_profile.save()
© www.soinside.com 2019 - 2024. All rights reserved.