2013-01-08 2 views
2

그래서 데이터베이스를 쿼리하는 데 사용할 단일 입력 필드가있는 슈퍼 기본 폼을 만들고 싶습니다.Django 폼에서 쿼리 데이터베이스 (모델)

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"를 수집 할 다음과 같이

내 모델 (models.py)입니다 사용자가 책 모델 인스턴스의 모든 데이터를 표시합니다. e uid는 데이터베이스의 일부 책입니다.

폼이 뷰와 연결된 방식과 이후 템플릿에 대한 이해를 가지고 있지만 제대로 작동하지 않는 것 같습니다.

나는 장고 사이트와 다른 많은 자료들을 내가 배울 수있는 예제로 끊임없이 찾았지만 아무것도 찾지 못했다.

나를 도와주는 사람이 있습니까?

감사합니다.

+1

? 양식 코드는 어디에 있습니까? –

+0

Aamir가 말했듯이, 이미 시도한 코드 중 일부는 문제가있는 부분을 찾는데 도움이 될 수 있습니다. – asermax

+2

Anthony, 폼 코드를 사용하여 질문을 편집하고 처리 할보기를 편집하십시오. –

답변

6

여기에서 간단한 검색을 할 수 있습니다. 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 %} 
+0

검색 창으로 전달할 정확한 쿼리는 무엇입니까? 이는 유형 오류이므로 except 블록에 도달하지 않습니다. except 블록은 값 오류를 제외한 것입니다. 템플릿 및 검색보기에서 검색 창을 구현 한 방법으로 원래의 게시물을 수정할 수 있습니까? –

+1

기본보기 (예 :'home')를 설정해야합니다. 이것은 매우 간단 할 수 있으며 search.html (검색 창)을로드합니다. 검색 창에 검색어를 입력하면 검색보기가로드됩니다. 검색보기로 직접가는 것처럼 들리므로'q'가'None'과 같습니다. 장고 자습서를 통해 작업 할 것을 적극 권장합니다. 아주 좋습니다. 튜토리얼 앱을 설정하고 나면 위의 제안 사항을 앱에 추가하고 앱의 기능을 살펴볼 수 있습니다. 그런 다음 앱에 필요한 조각을 재사용 할 수 있습니다. https://docs.djangoproject.com/en/dev/intro/tutorial01/ –

+0

이 코드는 저에게 적합하지 않습니다. 오류는 'Exception Value : 할당 전에 로컬 변수'results '가 참조됩니다. 양식 작업은 게시물이지만 초기보기가 없기 때문에 거기에 도착할 수도 없습니다. –

관련 문제