【发布时间】:2014-12-05 01:56:15
【问题描述】:
我四处搜索,发现大多数都指向由 Julien Phalip 创建的搜索:http://julienphalip.com/post/2825034077/adding-search-to-a-django-site-in-a-snap
答案似乎也在这里:Very simple user input in django
但是,我对 Django 非常陌生,想创建一个视图,让我真正了解正在发生的事情,所以我一直在阅读官方 Django 和 Tango with Rango 教程,但我没有看到一个简单的例子来说明我是什么试图理解一个简单的表单搜索。我的主要问题是为什么在示例中使用 POST 而不是 GET?我认为 POST 用于在 mysql 中“创建”数据条目,而 GET 用于查找/搜索数据条目?我是否遗漏了一些关于使用一个与另一个的基本知识?
我的应用中有以下简单示例:
models.py
class hardware(models.Model):
text = models.CharField(max_length=200, unique=TRUE)
pub_date = models.DateTimeField(default=timezone.now)
def __unicode__(self):
return self.text
class Barcode(models.Model):
hardware = models.ForeignKey(Hardware)
text = models.CharField(max_length=50)
pub_date = models.DateTimeField(default=timezone.now)
def __unicode__(self):
return self.text
forms.py
class HardwareForm(forms.modelForm):
class Meta:
model = Hardware
fields = ['text'}
views.py
def hardware_search(request):
if request.method == 'POST':
search_id = request.POST.get('textfield', None)
try:
hardwarename = Hardware.objects.get(text = search_id)
html = ("<H1>%s</H1>", hardwarename)
return HttpResponse(html)
except Hardware.DoesNotExist:
return HttpResponse("no such hardware found")
else:
return render(request, 'search.html')
搜索.html
<form method="POST" action="/hardware_search.html">
{% csrf_token %}
<input type="text" name="textfield">
<button type="submit">Upload text</button>
</form>
我的问题是,这是请求用户输入搜索和生成搜索结果的最简单方法吗?为什么使用 POST?我插入了这段代码,它似乎确实有效,但我就是不明白为什么。
其次,如何显示关联的外键类以及主类“硬件”搜索结果? ForeignKey 关联是否也提供了显示该数据的快捷方式?
谢谢!
【问题讨论】: