django - 查询数据库并为每个结果返回复选框
问题描述
我的目标是以最简单、最面向未来和最 django-y 的方式实现以下行为。将来其他人将不得不使用和修改这个 webapp,尽管它对我来说也是一个学习项目。
现在,感觉有点老套,我正在尝试学习django,并根据需要制作一些易于使用和修改的东西。
这是我目前的行为。用户查询数据库并返回单词列表。有一个特殊的词(或一系列)称为 alemma
和其他一些称为变体的词。位于lemma
列表顶部的一个特殊粘性框中。
在用户选择了他们想要的词之后,他们可以从这个选定的词列表中进行另一次搜索。
我的问题是:我是否正确实施了这一点?我没有使用表单,主要是 HTML,而且我担心我没有充分利用 django 的潜力。例如,我已经研究过forms
,FormSets
但我不太确定如何在这里使用它们,或者它们是否会让我的生活更轻松。
我附上了我的代码的相关部分,这样你就可以看到我是否犯了任何初学者的错误。
这是search.html
{% block content %}
<form method="get" action="">
Search:<input type="text" name="q" id="id_q" value="{{ query }}"/>
<input type="submit" value="Search" />
</form>
{% if show_search %}
{% if results %}
Results found:
<ol>
<li class="search-group">
/* right now the search only supports querying one lemma at a time! */
/* when more lemmas are supported, this 'sticky' box will also contain a loop */
<p class="sticky lemma"><input type="checkbox" name="{{query}}" checked/>{{query}} (lemma) </p>
<ul>
{% for result in results %}
<li class="lemma-variant"><input type="checkbox" name"{{result.form}}" checked/>{{result.form}}</li>
{% endfor %}
</ul>
</li>
</ol>
{% else %}
No results found.
{% endif %}
{% endif %}
{% endblock content %}
views.py
def search_view(request):
query = request.GET.get('q')
show_search = False
if query:
show_search = True
results = FrolexEntry.objects.filter(lemma=query)
else:
results = None
context = {
'results':results,
'show_search':show_search,
'query':query,
}
return render(request, 'search.html', context)
models.py
class FrolexEntry(models.Model):
form = models.CharField(max_length=100, primary_key = True, blank=True)
f_bfm = models.CharField(db_column='F_bfm', max_length=100, blank=True, null=True) # Field name made lowercase.
f_dmf = models.CharField(db_column='F_dmf', max_length=100, blank=True, null=True) # Field name made lowercase.
msd_afrlex = models.CharField(max_length=100, blank=True, null=True)
msd_bfm = models.CharField(max_length=100, blank=True, null=True)
msd_cattex_conv1 = models.CharField(max_length=100, blank=True, null=True)
msd_cattex_conv2 = models.CharField(max_length=100, blank=True, null=True)
lemma = models.CharField(max_length=100, blank=True, null=True)
lemma_src = models.CharField(max_length=100, blank=True, null=True)
def __str__(self):
return self.form
class Meta:
managed = False
db_table = 'main_frolexentry'
urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('', search_view, name = 'search'),
path('howto/', howto_view, name = 'howto'),
path('about/', about_view, name = 'about'),
]
解决方案
推荐阅读
- vimeo - 即使视频可用,也为 vimeo api 获取 404?
- image - Spring内容,如何在其他页面获取图片
- python - 提取包含列名或表条目中特定字符串的熊猫数据框
- azure-devops - Azure 开发运维。通过运行时变量定义变量组
- python-3.x - 如何在 Python 中将函数放入列表中?
- java - Android片段被另一个片段覆盖
- sass - 如何使用 Vaadin 7 和 maven 编译其他非主题 SCSS 文件
- sql-server - T-SQL CREATE DATABASE 结合 COLLATE 和 FILESPEC(s)
- r - 如果在其他列中满足条件,则将值附加到向量
- javascript - javascript vue,MVC 5中的__requestverificationtoken错误