【问题标题】:How to create a form that queries objects in a Model and display the query results in a new page?如何创建一个表单来查询模型中的对象并在新页面中显示查询结果?
【发布时间】:2020-12-13 11:34:20
【问题描述】:

我正在创建一个爱好网站(Airbnb 克隆),其中索引页面上有一个接受城市和属性类型(公寓、办公室、餐厅等)的表单。

我使用 Django 作为我的后端。

托管:https://directoffices.azurewebsites.net/(加载可能需要一些时间**没有 CDN 配置)

页面是索引和列表,其中索引是登录页面,由搜索表单和列出属性的列表组成。

我已经建立了一个表单(forms.py):

class SearchPropertyForm(ModelForm):

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.fields['city'].required = False
    self.fields['city'].empty_label = 'Where do you want to go?'
    self.fields['city'].widget.attrs.update(
        {'class': 'chosen-select-no-single'})

    self.fields['property_type'].required = False
    self.fields['property_type'].empty_label = 'Any Type'
    self.fields['property_type'].widget.attrs.update(
        {'class': 'chosen-select-no-single'})
    

class Meta:
    model = Listing
    fields = ['city', 'property_type']

Views.py

def index(request):
searchForm = SearchPropertyForm()

CONTEXT = {
        'searchForm': searchForm
    }

if request.method == "GET":
    searchForm = SearchPropertyForm(request.GET)
    if searchForm.is_valid():
        location = searchForm.cleaned_data.get('city')
        property_type = searchForm.cleaned_data.get('property_type')
        listings = Listing.objects.filter(
            city=location, property_type=property_type)


        return render(request, 'core/listings.html', {'listings' : listings})
    else:
        searchForm.errors.as_data()
else:
    return render(request, 'core/index.html', CONTEXT)

HTML:

<form class="main-search-form" method="GET" action="/listings/">
    ** CONTENTS AND FIELDS **
</form>

urls.py

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from core import views as coreViews
from users import views as userViews
from properties import views as propertyViews

urlpatterns = [
    path('admin/', admin.site.urls),

    path('', coreViews.index, name="index"),
    path('listing/', coreViews.listing, name='listing'),
    path('contact/', coreViews.contact, name='contact'),
    path('privacy-policy/', coreViews.privacyPolicy, name='privacyPolicy'),
    path('terms-and-conditions/', coreViews.terms, name='terms'),

    path('login/', userViews.loginPage, name='loginPage'),
    path('logout/', userViews.logoutUser, name='logout'),
    path('register/', userViews.registerPage, name='registerPage'),

    path('property/', include('properties.urls', namespace='property')),

    path('submit-property/', propertyViews.submitProperty, name='submit_property'),
    path('sample-property/', propertyViews.sampleProperty, name='sample_property'),

    path('user/<str:user_id>/', include('users.urls', namespace='users')),

] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

我不确定这是否是正确的做法,一旦列表页面打开,索引页面总是重定向到列表页面并且没有办法返回。

请帮帮我。

【问题讨论】:

    标签: python django forms django-models django-forms


    【解决方案1】:

    你能添加你的网址吗,那里可能有问题。

    【讨论】:

    • 我已经访问了演示站点,并且能够在列表之后导航回索引,所以不清楚这个问题 - 虽然该站点似乎没有传递搜索参数 - 是对吗?
    猜你喜欢
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2021-10-03
    • 2010-10-15
    相关资源
    最近更新 更多