【问题标题】:ValueError when i compare input values with database object当我将输入值与数据库对象进行比较时出现 ValueError
【发布时间】:2022-12-18 17:53:52
【问题描述】:

我想将表单输入与数据库值进行比较。例如:

有一个名为 password 的输入字段 .. 我想将输入值与数据库中的密码进行比较(如果我已经知道该行(id))

但是当我比较它时,我得到了这样的值错误。谷歌搜索 2 小时,但没有任何效果。我是 django 的新手 .. 我希望有人能帮助我 :D

这是我的视图代码

id      = modelUser.objects.values('id').filter(username=txtUsername)
checkPassword = modelUser.objects.values('password').filter(username=txtUsername)

if(txtPassword == checkPassword.password):
    return render(request,'success.html')
            

模型.py

class modelUser(models.Model):
    firstname = models.CharField(max_length=200, null=False, blank=False)
    lastname = models.CharField(max_length=200, null=False, blank=False)
    username = models.CharField(max_length=200, null=False, blank=False)
    password = models.CharField(max_length=200, null=False, blank=False)
    def __str__(self):
        return self.username

【问题讨论】:

    标签: python django django-models django-views django-templates


    【解决方案1】:

    首先,我会说阅读how to substitute a custom User modelHow to log an user in 上的 Django 文档。

    我会重复自己并强调我不要推荐此方法,请遵循框架教程并学习如何使用其全部功能。

    为了学习,你会这样做:

    意见.py:

    from django.core.exceptions import ObjectDoesNotExist
    from django.shortcuts import render
    from core.models import modelUser
    
    def alternative_login(request):
        if request.method == 'POST':
            username = request.POST.get('username')
            password = request.POST.get('password')
    
            try:
                user = modelUser.objects.get(username=username)
                if password == user.password:
                    return render(request, 'alternative_success.html')
            except ObjectDoesNotExist:
                pass
    
        return render(request, 'alternative_login.html', {})
    

    网址.py

    from django.urls import path
    from core import views
    
    app_name = 'core'
    
    urlpatterns = [
        path('alternative/login/', views.alternative_login, name='alternative-login'),
    ]
    

    alternative_login.html

    {% extends 'base.html' %}
    
    {% block content %}
    <form action="{% url 'core:alternative-login' %}" method="post">
        {% csrf_token %}
        <input type="text" name="username">
        <input type="password" name="password">
        <button type="submit">Submit</button>
    </form>
    {% endblock %}
    
    

    【讨论】:

    • 我试过这个,同样的事情发生在这个错误消息中:精确查找的 QuerySet 值必须限制为使用切片的一个结果。
    • 我已经更新了答案。第三次,请学习使用框架特性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    相关资源
    最近更新 更多