4

だから私は以前にDjango/Ajax / Jqueryで成功したことがありますが、管理コンソール内でそれを実行できるかどうか疑問に思っていました。ユーザーが[新規追加]フォームにアクセスしたら、郵便番号を入力してもらい、その郵便番号に基づいて、その郵便番号に対応するデータベースの値に基づいて、次のフィールドで利用可能な選択肢をフィルタリングします。コード。

そのフォームのPOSTを処理する管理ビューを探していますが、djangoは比較的慣れていないため、見つけるのに問題があります。多分私はこれを考えすぎていて、もっと簡単な解決策がありますか?

4

2 に答える 2

7
  1. 郵便番号を指定して、利用可能な選択肢のjsonリストで応答するビューを作成します(python)
  2. 郵便番号フィールド(テンプレート)を持つモデルの管理テンプレートをオーバーライドします
  3. 郵便番号のkeyupまたはchangeイベントにリスナーを追加します。このイベントは、ビューをクエリし、応答を使用して次のフィールドをフィルタリングします(javascript)
于 2012-05-03T06:56:38.977 に答える
1

urls.py

from django.conf.urls import url

app_name = 'your_app'
urlpatterns = [
    url(r'^query/page/(?P<otherModelSlug>[a-zA-Z0-9]+)/?', PageYouQueryFrom.as_view(), name='query_page'),
    …
    # yourWebsite.com/your_app/util/kittens
    url(r'^util/(?P<fieldValue>[a-zA-Z0-9]+)/?', GetDataUtilitly.as_view(), name='get_data_util'),
]

data_template.html

{{result_html}}

page_you_want_to_ajax.html

{% extends "base.html" %}

{% block script-inline %}  
  $(document).ready( function () {
    $("#place_to_query").change(function() {
      var queryURL = "/your_app/util/" + $(this).val();
      queryBox = $(this)
      $.get({
        url: queryURL,
        contentType: "application/x-www-form-urlencoded",
      })
        .done(function( data ) {
          html = $( data ).text()
          queryBox.parent().after(html)
        });
    });
  });
{% endblock script-inline %}

{% block content %}
  {{ otherModel }} <!-- or it could be a specific  field -->
  <input id="place_to_query"></input>
  <!-- The ajax will go here afterwards-->
{% endblock content %}

メインビュー-PageYouQueryFrom.py

# this is a Class Based View, but you can use a function based one too
class PageYouQueryFrom(TemplateView):
    template_name = 'path/to/page_you_want_to_ajax.html'

    def get_context_data(self, **kwargs):
        context_data = super(PageYouQueryFrom, self).get_context_data(**kwargs)
        context_data['otherModel'] = get_object_or_404(OtherModel, slug=self.kwargs['otherModelSlug'])
        return context_data

データクエリビュー-GetDataUtilitly.py

from django.views.generic import TemplateView
import requests
from pyquery import PyQuery

# this is a Class Based View, but you can use a function based one too
class GetDataUtilitly(TemplateView):
    template_name = 'path/to/data_template.html'
    def get_context_data(self, **kwargs):
        field_value = self.kwargs['fieldValue']
            page = requests.get('https://www.page.com?searchField=' + field_value)
            pq = PyQuery(page.content)
            # Get the (html) portion of what you want
            result_html = pq('div.c-table__row').html()
            return {'result_html': result_html}
于 2018-07-20T16:06:57.410 に答える