1

私は django-autocomplete-light の初心者です。「グローバルナビゲーションオートコンプリート」( https://django-autocomplete-light.readthedocs.org/en/docs_rewrite/navigation.html#a-simple-view )のようなものを実装しようとしていますが、これはナビゲートに使用されます患者の間。

問題は次のとおりです。

  • ジョン・スミスという患者がいるとしましょう。
  • 「John」または「Smith」と入力すると、正しいオートコンプリートが表示され、患者を選択できます。
  • ただし、「John S」または名前と姓の両方を入力する他の組み合わせを入力すると、オートコンプリートは空になります...
  • モデルを別の方法でフィルタリングしようとしました。たとえば、q を「name」と「surname」に分割し、関連するフィールドで Q を使用してモデルをフィルタリングしましたが、それも役に立ちません...

どの部分が欠けていますか? 特定のモデルの 2 つのフィールドに基づくフィルタリングに対応できないフィルタリングまたはオートコンプリートですか?

これは私の単純なモデルの一部です (URL 'patient_detail' が存在し、正常に動作することに注意してください。ここに貼り付けないでください):

class Patient(models.Model):
    name = models.CharField(max_length = 30, blank=False)
    surname = models.CharField(max_length = 70, blank=False)

    def __unicode__(self):
        return '%s %s' % (self.name, self.surname)

    def get_absolute_url(self):
        return reverse('patient_detail', kwargs = {'pk':self.pk})

それよりも、私はこれを (ドキュメントで説明されていることと同様に) 私のビューで行っています。ここで、フィールドに入力しているのは q get だけです:

def pacjent_autocomplete(request, template_name = 'reception_autocomplete.html'):
   q = request.GET.get('q','').strip()
   queries = {}
   queries['patients'] = Patient.objects.filter(Q(name__icontains=q) | Q(surname__icontains = q))
   return render(request, template_name, queries)

受信_オートコンプリート.html ファイルは次のようになります。

<span class="separator">Patients</span>
{% for patient in patients %}
<a class="block choice" href="{{patient.get_absolute_url}}">{{patient}}</a>
{% endfor %}

私のメイン ビューには、このスクリプトの対象となるフィールドがあります。

   <script type="text/javascript">
    $(document).ready(function() {
        $('#id_new_patient').yourlabsAutocomplete({
            url: "{% url 'reception_autocomplete' %}",
            choiceSelector: 'a',
        }).input.bind('selectChoice', function(e, choice, autocomplete) {
            document.location.href = choice.attr('href');
        });
    });
    </script>

「John Sm」のような入力に対して適切な患者を表示する方法について、ご協力をお願いします。

4

2 に答える 2