首页 > 解决方案 > 查询数据库并为每个结果返回复选框

问题描述

我的目标是以最简单、最面向未来和最 django-y 的方式实现以下行为。将来其他人将不得不使用和修改这个 webapp,尽管它对我来说也是一个学习项目。

现在,感觉有点老套,我正在尝试学习django,并根据需要制作一些易于使用和修改的东西。

这是我目前的行为。用户查询数据库并返回单词列表。有一个特殊的词(或一系列)称为 alemma和其他一些称为变体的词。位于lemma列表顶部的一个特殊粘性框中。

在此处输入图像描述

在用户选择了他们想要的词之后,他们可以从这个选定的词列表中进行另一次搜索。

我的问题是:我是否正确实施了这一点?我没有使用表单,主要是 HTML,而且我担心我没有充分利用 django 的潜力。例如,我已经研究过formsFormSets但我不太确定如何在这里使用它们,或者它们是否会让我的生活更轻松。

我附上了我的代码的相关部分,这样你就可以看到我是否犯了任何初学者的错误。

这是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'),
]

标签: djangodjango-forms

解决方案


推荐阅读