gpt4 book ai didi

python - Django 表单查询数据库(模型)

转载 作者:太空狗 更新时间:2023-10-30 02:12:39 24 4
gpt4 key购买 nike

所以我想创建一个带有单个输入字段的 super 基本表单,用于查询我的数据库。

我的模型(models.py)如下:

from django.db import models

class Book(models.Model):
uid = models.IntegerField(primary_key=True)
title = models.CharField(max_length=30)
class Meta:
db_table = u'books'

forms.py:

from django import forms
from myapp.models import Book

class EnterIDForm(forms.form):
book_id = forms.CharField()
# add a custom clean function to validate that the user input
# is a valid book ID
def clean_book_id(self):
try:
book_id = int(self.cleaned_data["book_id"])
except:
book_id = None

if book_id and Book.objects.filter(uid=book_id).count():
return book_id
else:
raise forms.ValidationError("Please enter a valid book ID number.")

views.py:

from django.shortcuts import render_to_response
from myapp.models import Book

def form_view(request):
if request.method == "POST":
# the user has submitted the form, see if we have a book
book_id_form = EnterIDForm(request.POST) # instantiate our form class with the user data
if book_id_form.is_valid():
# if our form is valid, then we have a book_id that works:
the_book = Book.objects.get(uid=book_id_form.cleaned_data["book_id"])
return render_to_response("book_template.html", { "the_book": the_book }, context_instance=RequestContext(request))
# if the form wasn't valid, it will fall through to the other return statement.
else:
# If the user didn't submit a form, instantiate a blank one.
book_id_form = EnterIDForm()
return render_to_response("form_template.html", { "book_id_form": book_id_form }, context_instance=RequestContext(request))

我希望输入字段从用户那里收集“uid”并显示来自 Book 模型实例的所有数据,其中 uid 是数据库中的某本书。

我了解表单如何与 View 以及后来的模板联系在一起,但我似乎无法让它发挥作用。

我一直在 Django 站点和许多其他资源中搜索可以学习的示例,但一无所获。

有人介意帮帮我吗?

谢谢。

最佳答案

您可以在这里进行简单的搜索。您不需要任何 POST 调用或表单创建。但是,如果您想创建一个表单,这应该仍会为您指明正确的方向。

尝试这样的事情:

搜索.html:

<form method="get" action="/search/">
Search Notecards:<input type="text" name="q" id="id_q" value="{{ query }}"/>
<input type="submit" value="Search" />
</form>

views.py:

from myapp.models import Book
from django.template import RequestContext
from django.shortcuts import render_to_response

def search(request):
query = request.GET.get('q')
try:
query = int(query)
except ValueError:
query = None
results = None
if query:
results = Book.objects.get(uid=query)
context = RequestContext(request)
return render_to_response('results.html', {"results": results,}, context_instance=context)

结果.html:

{% if results %}
{% for result in results %}
{{ result.uid }}
{{ result.xxxx }}
{{ result.xxxx }}
{% endfor %}
{% else %}
<h3 class='error'>Please enter a valid UID</h3>
<form method="get" action="/search/">
Search Notecards:<input type="text" name="q" id="id_q" value="{{ query }}"/>
<input type="submit" value="Search" />
</form>
{% endif %}

关于python - Django 表单查询数据库(模型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14225601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com