Django的形式来查询数据库(型号)(Django form to query database

2019-07-18 00:34发布

所以,我想创建一个将被用于查询我的数据库的单一输入字段超级基本形式。

我的模型( 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”并显示所有的书模型实例数据的其中uid是一些书在数据库中。

我的形式是怎样的观点,后来模板绑在理解,但我似乎无法得到它的工作。

我无休止地搜查了Django的网站和许多其他资源的一个例子,我可以,但什么都学不到。

任何人都介意帮我吗?

谢谢。

Answer 1:

你可以在这里做一个简单的搜索。 你不需要任何POST来电或表单创建。 但是,如果你想创建一个表单这应该还是你指出正确的方向。

尝试是这样的:

search.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)

results.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 %}


文章来源: Django form to query database (models)