gpt4 book ai didi

Python/Django 2.0/Bootstrap3 : Retrieving data from db based on form inputs using Django

转载 作者:太空宇宙 更新时间:2023-11-03 13:58:15 25 4
gpt4 key购买 nike

我是 Django 和 Python 新手。所以我需要关于一个问题的帮助。我检查了StackOverflow是否发现了类似的问题,但还无法解决问题。我正在 django 上创建一个网络应用程序,我想根据表单接受的标准从数据库检索旅行。但它不起作用。 这是我所做的:

模型.py

    from django.db import models
from django.forms import ModelForm
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.urls import reverse

class Tour(models.Model):
TourOperator = models.ForeignKey(TourOperator, on_delete=models.PROTECT)
TourCode = models.CharField(max_length=10, unique=True, help_text='Ex. JT001 ')
Title = models.CharField(max_length=200, help_text="Title of the tour here")
Slug = models.SlugField(max_length=200)
Type = models.CharField(max_length=200, choices = TOUR_TYPES, help_text="Select from the list")
Duration = models.IntegerField(default=0)
ShortDesc = models.CharField(max_length=200, help_text='Short description in 200')
Description = models.TextField(help_text='Description of the tour...')
Itinerary = models.CharField(max_length=500, help_text="Itinerary of the tour...")
Inclusions = models.CharField(max_length=200, help_text="Inclusions of the tour; Seperate them with commas")
Exclusions = models.CharField(max_length=200, help_text="Exclusions of the tour; Seperate them with commas")
Difficulty = models.CharField(max_length=20, help_text="Enter a value between 1 to 10")
GroupSize = models.CharField(max_length=2, help_text="Group size")
Seasonality = models.CharField(max_length=100, help_text="Seasonality of the tour; Ex. July - September")
Highlights = models.CharField(max_length=100, help_text="Highlights of the tour; Ex. Yamchun fortress, etc")
#Destination_id = models.ForeignKey(Destination)
Price = models.DecimalField(max_digits=6, decimal_places=2)
Image = models.ImageField(upload_to='tours_image/')
Created = models.DateTimeField(auto_now_add=True)
Updated = models.DateTimeField(auto_now=True)
Available = models.BooleanField(default=True)
Rating = models.IntegerField()
StartDate = models.DateField(auto_now=True)
EndDate = models.DateField(auto_now=True)

form.py

from django import forms
from tours.models import Tour

class SearchTourForm(forms.ModelForm):
class Meta:
model = Tour
# fields = ('Type','Destination', 'StartDate', 'Available') #Country
exclude = ('Exclusions', )

search_tour.html

          <!-- Form  -->

<form action="" method="GET">

<div class="row form-group">
<div class="col-md-12">
<label for="activities">Country</label>
<select id="activities" class="form-control">
<!-- name="Country" -->
<option value="Tajikistan">Tajikistan</option>

</select>
</div>
</div>
<div class="row form-group">
<div class="col-md-12">
<label for="activities">Type of tours/Activities</label>
<select name="Type" value="{{ tour.Type }} id="activities" class="form-control">
<option value="">All tours/activities</option>
<option value="Trekking">Trekking</option>
<option value="Hiking">Hiking</option>
<option value="Jeep-tour">Jeep-tour</option>
<option value="Cross-border tour">Cross-border tour</option>
<option value="City tour tour">City tour tour</option>
<option value="Sightseeing">Sightseeing</option>
</select>
</div>
</div>
<div class="row form-group">
<div class="col-md-12">
<label for="destination">Destination</label>
<select name="Destination" id="destination" class="form-control">
<option value="">All destinations</option>
<option value="Bartang">Bartang</option>
<option value="Sarez lake">Sarez lake</option>
<option value="Murghab">Murghab</option>
<option value="Fedchenko">Fedchenko</option>
</select>
</div>
</div>
<div class="row form-group">
<div class="col-md-12">
<label for="date-start">Date Travel</label>
<input name="StartDate" type="text" id="date-start" class="form-control">
</div>
</div>
<div class="row form-group">
<div class="col-md-12">
<input type="submit" class="btn btn-primary btn-block" value="Search">
</div>
</div>
</form>
<!-- Form /-->
{% block content_main %}
<div class="row">
<div class="col-md-8 col-md-offset-2 text-center gtco-heading">
<h2>Search Result</h2>
<p>Here is what matched your query.</p>
</div>
</div>
</div>
<div class="row">
<!-- Tour viewer -->
{% for tour in tours %}
<div class="col-lg-4 col-md-4 col-sm-6">
<div class="dtpTCard">
<figure>
<img src="{{ tour.Image.url }}" alt="{{ tour.Title }}" class="img-responsive" style="width:400px; height:230px;">
</figure>
<div>
<!-- <a href=""> -->
<h2 class="dtpCardTitleTextColor"> {{ destination.Region | truncatewords:1 }} Bartang, Tajikistan {{ destination.Country | truncatewords:1 }} </h2>
<!-- </a> -->
<!-- <p>Bartang valley is the remote area in Pamir, Tajikistan.
</p> -->
<div class="row dtpCardInRow">
<!-- style="font-size: 14px; color:#000000;" -->
<div class="col-xs-12" style="padding-bottom: 5px;">
<b><u>Description</u></b>: {{ tour.ShortDesc|truncatechars:80 }}
</div>
<div class="col-xs-6">
<b><u>Tour type</u></b>: {{ tour.Type | capfirst}} <br>
<b><u>Duration</u></b>: {{ tour.Duration }} days
</div>
<div class="col-xs-6 dtpCardRight" >
<b><u>Difficulty</u></b>: {{ tour.Difficulty }}/10<br>
<b><u>Price</u></b>: ${{ tour.Price }}
</div>
</div>
<br>
<a class="btn btn-primary" href="{{tour.get_absolute_url }}">View tour</a>
<!-- /tours/details/{{tour.id }} -->
</div>
</div>
</div>
{% empty %}
<h4>Sorry, no items in this page.</h4>
<p>Coming soon...</p>
{% endfor %}
<!-- Tour /-->
</div>
<!-- Pagination -->
<div class="row">
<div class="col-sm-12" style="font-size: 18px; ">
<br>
<div class="pagination">
<span class="step-links">
{% if tours.has_previous %}
<a href="?page=1">&laquo; first</a>
<a href="?page={{ tours.previous_page_number }}">previous</a>
{% endif %}
<span class="current">
Page {{ tours.number }} of {{ tours.paginator.num_pages }}.
</span>
{% if tours.has_next %}
<a href="?page={{ tours.next_page_number }}">next</a>
<a href="?page={{ tours.paginator.num_pages }}">last &raquo;</a>
{% endif %}
</span>
</div>
</div>
</div>
<!-- Pagination /-->
{% endblock content_main %}

vews.py

    from django.views.generic import TemplateView
from django.shortcuts import render, redirect
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from tours.forms import CreateTourForm, SearchTourForm
from tours.models import Tour, Destination#, TourOperator
from django.contrib.auth.models import User
from django.db.models import Q
from django.conf import settings


def search_tours(request):
if request.method == 'GET':
form = SearchTourForm(request.GET)
if form.is_valid():
Country = form.cleaned_data['Country']
Type = form.cleaned_data['Type']
Destination = form.cleaned_data['Destination']
StartDate = form.cleaned_data['StartDate']

tours = Tour.objects.filter(Q(Country__icontains = Country)|
Q(Type__exact = int(Type))|
Q(Destination__exact = int(Destination))|
Q(StartDate__gte = int(StartDate)))

return render(request, 'tours/search_tours.html', {
'tours': tours,
'media_url': settings.MEDIA_URL,
'form':form,
})

else:
form = SearchTourForm()

tours = Tour.objects.filter(Available = True)


return render(request, 'tours/search_tours.html', {
'tours': tours,
# 'media_url': settings.MEDIA_URL,
'form':form,
})

url.py

    from django.conf.urls import url
from . import views
from tours.views import ToursView

app_name = 'tours'

urlpatterns = [

url(r'^$', ToursView.as_view(), name='tours'),
url(r'^search/$', views.search_tours),
];

enter image description here

所以问题是,当我搜索时,它输出所有旅行并忽略表单条件。我是初学者,无法弄清楚问题是什么((

GitHub 中上述文件的链接: Django web app

最佳答案

该表格几乎肯定永远不会有效。您的模型定义了一整套字段,其中大部分是必需的,并且您的表单不会排除它们,因此它们将继续是必需的。您不会在模板中输出表单错误,也不会在模板无效时重新填充模板,因此用户永远看不到它是无效的。

但是您实际上并不需要这里的模型表单,而只是一个标准表单,其中包含您需要显式声明的四个字段。模型表单用于编辑和创建模型实例,而您不执行这些操作。

另请注意,该方法始终为 GET,因为这是标准请求。您可能应该检查 GET 是否包含数据,而不是检查这一点:

if request.GET:

关于Python/Django 2.0/Bootstrap3 : Retrieving data from db based on form inputs using Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49447937/

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