Python 查找数据库中是否存在lastname

Python 查找数据库中是否存在lastname,python,django,django-views,Python,Django,Django Views,我试图编写一个简单的IF语句,在用户点击submit按钮创建新记录之前检查数据库中是否存在lastname。这是我到目前为止的代码,我是Django和Python新手,非常感谢您的帮助 我创建了一个名为lastname的变量,这里的思想过程是当用户点击submit时,它会在提交之前首先检查数据库,如果lastname存在,会弹出一个弹出窗口警告他们,以防止重复记录。当一个人在填写完表单之前退出字段让它运行脚本以节省时间时,使用它确实很酷 #views.py 从.models导入StudentCh

我试图编写一个简单的IF语句,在用户点击submit按钮创建新记录之前检查数据库中是否存在lastname。这是我到目前为止的代码,我是Django和Python新手,非常感谢您的帮助

我创建了一个名为lastname的变量,这里的思想过程是当用户点击submit时,它会在提交之前首先检查数据库,如果lastname存在,会弹出一个弹出窗口警告他们,以防止重复记录。当一个人在填写完表单之前退出字段让它运行脚本以节省时间时,使用它确实很酷

#views.py
从.models导入StudentCheck
从django.shortcuts导入渲染
从django.http导入HttpResponse、Http404、HttpResponseRedirect
从forms.forms导入NewStudentForm
def NewStudentFormCheckList(请求):
如果request.method==“POST”:
form=NewStudentForm(request.POST)
lastname=StudentCheck.lastname
如果form.is_有效():
newstudent=form.save()
其他:
form=NewStudentForm()
返回呈现(请求'forms/newstudentcheck_form.html',{'form':form})
下面是我的测试代码,以查看查询是否正常工作,并且我不断得到一个错误,即查询集不存在


从.models导入StudentCheck
从django.core.exceptions导入ValidationError
从django.shortcuts导入渲染
从django.http导入HttpResponse、Http404、HttpResponseRedirect
从forms.forms导入NewStudentForm
def NewStudentFormCheckList(请求):
如果request.method==“POST”:
form=NewStudentForm(request.POST)
lastname=StudentCheck.lastname
number\u lastnames=StudentCheck.objects.get(lastname\u exact=lastname)
如果form.is_有效():
newstudent=form.save()
打印(编号\姓氏)
其他:
form=NewStudentForm()
返回呈现(请求'forms/newstudentcheck_form.html',{'form':form})

您可以使用字段查找
exact
(有关更多信息,请参阅)获取数据库中已设置给定值的所有条目

在您的情况下,它将是
StudentCheck.objects.get(lastname\uu exact=yourvalue)
。这将为您提供一个
QuerySet
,如果您想知道有多少条目具有给定的姓氏,您必须在此
QuerySet
上使用
count()
,以了解它有多少条目

您可以在两个不同的位置使用此解决方案:

  • 接收POST值时,直接在视图中显示
  • 在自定义验证器中,该验证器将用于模型的定义(请参阅了解如何操作)
  • 我建议使用第二种方法,因为这样可以更容易地为用户提供自定义信息,说明其数据不被接受的原因

    但这两种方法都需要将数据传递到服务器进行验证。否则,您可以定义一个视图,该视图将接收lastname,并在数据库中以某种方式(例如JSON)存在时返回,当用户单击submit按钮时,将使用Ajax调用该视图

    编辑

    根据OP的请求,以下是自定义验证器的示例:

    来自django.core.exceptions的
    导入验证错误
    从.models导入StudentCheck
    def validate_lastname(值):
    number\u lastnames=StudentCheck.objects.get(lastname\u exact=value)
    如果编号\u lastnames>0:
    引发验证错误(
    “%s”已存在“%s”值,
    )
    
    现在,您可以将此自定义验证器与属性
    validators
    一起使用,无论是在模型的定义中还是在表单的定义中,如下所示:
    lastname=models.CharField(验证器=[validate\u lastname])


    希望有帮助

    您可以使用
    表单访问它。已清理的\u数据['lastname']
    。尽管您可能更喜欢在表单验证中处理它,你也可以通过设置你的模型来防止重复。你能给我写一个例子让我更好地理解它吗?哪种解决方案的一个例子?验证器似乎是最好的方法,我读的文献越多。值不应该是lastname字段吗?这是如何从该字段获取值的?由于某些原因,我无法在我的views.py上查询我的queryset。例如,这就是我通过控制台测试的内容。