【问题标题】:Django forms: How do I get first and last names from an HTML form?Django 表单:如何从 HTML 表单中获取名字和姓氏?
【发布时间】:2010-01-14 20:29:34
【问题描述】:

目前,搜索表单仅用于姓氏,这会导致超过one last name 的问题。

Antony Hatchkin 注意到 here

为了解决这个问题,我想添加一个包含姓氏和名字的搜索表单,并编写一个新的搜索函数 search2()。

新功能会是这个样子吗?

def search2(request):
    q_last = request.GET.get('q_last', '')
    q_first = request.GET.get('q_first','')
    lawyers = Lawyer.objects.filter(last__iexact=q_last).first__icontains=q_first)
....

如果是这样,我如何从表单中获取 q_last 和 q_first?

这是我现在使用的视图:

def search(request):
    q = request.GET.get('q', '')
    if q:
        lawyers = Lawyer.objects.filter(last__iexact=q)
        if len(lawyers)==0:
            return render_to_response('not_in_database.html', {'query': q})
        if len(lawyers)>1:
            return render_to_response('more_than_1_match.html', {'lawyers': lawyers, 'query': q})
        q_school = Lawyer.objects.filter(last__iexact=q).values_list('school', flat=True)
        q_year = Lawyer.objects.filter(last__iexact=q).values_list('year_graduated', flat=True)
        lawyers1 = Lawyer.objects.filter(school__iexact=q_school[0]).filter(year_graduated__icontains=q_year[0]).exclude(last__icontains=q)        
        return render_to_response('search_results.html', {'lawyers': lawyers1, 'query': q})
    else:
        return HttpResponse('Please submit a search term.')

编辑

这样的表单中的新字段?

First name:<form action="/search/" method="get">
        <input type="text" name="q_first">
        <br />
Last name:<input type="text" name="q_last">
        <input type="submit" value="Search">
    </form>

【问题讨论】:

  • 那么您需要在表单中添加一个新字段,这里我提供了 django 文档中有关使用表单的正确方法的相关引用:stackoverflow.com/questions/2059374/…
  • 你说的也行。 django 表单库是一组非常好的帮助器,用于生成、验证和重新填充 HTML 表单,甚至可以直接使用 CRUD 内容(模型表单),但如果你也可以使用 request.GET 或 request.POST 来访问提交的值不想使用表格。但使用表格。严重地。阅读其他人发布的文档。了解你的工具。

标签: django django-forms


【解决方案1】:

在 django 中,forms.Form 通常用于:

forms.py:

from django import forms

class ContactForm(forms.Form):
    first_name = forms.CharField(max_length=100)
    last_name = forms.CharField(max_length=100)

当你习惯了,切换到更高级的形式:

forms.py:

from django import forms

class ContactForm(forms.ModelForm):
    class Meta:
        model=Lawyer
        fields = 'first_name', 'last_name'

至于在模板中使用它阅读docs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 2015-04-30
    • 2015-05-02
    • 1970-01-01
    相关资源
    最近更新 更多