MediDoc: Update 6 – Search Medical Institutions

MediDoc: Paperless and Efficient Healthcare Management (7 Part Series)

1 MediDoc: What Got Done Till Now
2 MediDoc: Update 2 – Improve UI and Add User Functionality
3 more parts…
3 MediDoc: Update 3 – Admin Approval and Profile Page
4 MediDoc: Update 4 – Deployment
5 MediDoc: Update 5 – Small UI Tweaks
6 MediDoc: Update 6 – Search Medical Institutions
7 MediDoc: Efficient Paperless Medical Treatment Management System – DOHackathon Submission

Medical Search

Today, I added the search medical institution page. This is the same as the search case page but, searches for medical institutions (hospitals, pharmacies, diagnosis centers). To implement this, the module django_simple_search is used.

<span>from</span> <span>django_simple_search</span> <span>import</span> <span>search_filter</span>
<span>def</span> <span>search_medical</span><span>(</span><span>request</span><span>):</span>
<span>queries</span> <span>=</span> <span>request</span><span>.</span><span>GET</span><span>.</span><span>get</span><span>(</span><span>'q'</span><span>)</span>
<span>if</span> <span>queries</span> <span>is</span> <span>not</span> <span>None</span><span>:</span>
<span>search_fields</span> <span>=</span> <span>[</span><span>'username'</span><span>,</span> <span>'address'</span><span>,</span> <span>'mobile_no'</span><span>,</span> <span>'emergency_mobile'</span><span>,</span> <span>'pin_code'</span><span>,</span> <span>'other_info'</span><span>]</span>
<span>split_queries</span> <span>=</span> <span>queries</span><span>.</span><span>split</span><span>()</span>
<span>users</span> <span>=</span> <span>None</span>
<span>for</span> <span>query</span> <span>in</span> <span>split_queries</span><span>:</span>
<span>current_users</span> <span>=</span> <span>User</span><span>.</span><span>objects</span><span>.</span><span>filter</span><span>(</span>
<span>search_filter</span><span>(</span><span>search_fields</span><span>,</span> <span>query</span><span>),</span>
<span>is_active</span><span>=</span><span>True</span><span>,</span>
<span>groups__name__in</span><span>=</span><span>[</span><span>'hospital'</span><span>,</span> <span>'pharmacy'</span><span>,</span> <span>'diagnosis_center'</span><span>],</span>
<span>)</span>
<span>if</span> <span>users</span> <span>is</span> <span>None</span><span>:</span>
<span>users</span> <span>=</span> <span>current_users</span>
<span>else</span><span>:</span>
<span>users</span> <span>=</span> <span>users</span><span>.</span><span>union</span><span>(</span><span>current_users</span><span>)</span>
<span>return</span> <span>render</span><span>(</span><span>request</span><span>,</span> <span>'cases/search-medical.html'</span><span>,</span> <span>{</span><span>'users'</span><span>:</span> <span>users</span><span>,</span> <span>'search_term'</span><span>:</span> <span>queries</span><span>})</span>
<span>else</span><span>:</span>
<span>return</span> <span>render</span><span>(</span><span>request</span><span>,</span> <span>'cases/search-medical.html'</span><span>)</span>
<span>from</span> <span>django_simple_search</span> <span>import</span> <span>search_filter</span>

<span>def</span> <span>search_medical</span><span>(</span><span>request</span><span>):</span>
    <span>queries</span> <span>=</span> <span>request</span><span>.</span><span>GET</span><span>.</span><span>get</span><span>(</span><span>'q'</span><span>)</span>
    <span>if</span> <span>queries</span> <span>is</span> <span>not</span> <span>None</span><span>:</span>
        <span>search_fields</span> <span>=</span> <span>[</span><span>'username'</span><span>,</span> <span>'address'</span><span>,</span> <span>'mobile_no'</span><span>,</span> <span>'emergency_mobile'</span><span>,</span> <span>'pin_code'</span><span>,</span> <span>'other_info'</span><span>]</span>
        <span>split_queries</span> <span>=</span> <span>queries</span><span>.</span><span>split</span><span>()</span>
        <span>users</span> <span>=</span> <span>None</span>
        <span>for</span> <span>query</span> <span>in</span> <span>split_queries</span><span>:</span>
            <span>current_users</span> <span>=</span> <span>User</span><span>.</span><span>objects</span><span>.</span><span>filter</span><span>(</span>
                <span>search_filter</span><span>(</span><span>search_fields</span><span>,</span> <span>query</span><span>),</span>
                <span>is_active</span><span>=</span><span>True</span><span>,</span>
                <span>groups__name__in</span><span>=</span><span>[</span><span>'hospital'</span><span>,</span> <span>'pharmacy'</span><span>,</span> <span>'diagnosis_center'</span><span>],</span>
            <span>)</span>
            <span>if</span> <span>users</span> <span>is</span> <span>None</span><span>:</span>
                <span>users</span> <span>=</span> <span>current_users</span>
            <span>else</span><span>:</span>
                <span>users</span> <span>=</span> <span>users</span><span>.</span><span>union</span><span>(</span><span>current_users</span><span>)</span>
        <span>return</span> <span>render</span><span>(</span><span>request</span><span>,</span> <span>'cases/search-medical.html'</span><span>,</span> <span>{</span><span>'users'</span><span>:</span> <span>users</span><span>,</span> <span>'search_term'</span><span>:</span> <span>queries</span><span>})</span>
    <span>else</span><span>:</span>
        <span>return</span> <span>render</span><span>(</span><span>request</span><span>,</span> <span>'cases/search-medical.html'</span><span>)</span>
from django_simple_search import search_filter def search_medical(request): queries = request.GET.get('q') if queries is not None: search_fields = ['username', 'address', 'mobile_no', 'emergency_mobile', 'pin_code', 'other_info'] split_queries = queries.split() users = None for query in split_queries: current_users = User.objects.filter( search_filter(search_fields, query), is_active=True, groups__name__in=['hospital', 'pharmacy', 'diagnosis_center'], ) if users is None: users = current_users else: users = users.union(current_users) return render(request, 'cases/search-medical.html', {'users': users, 'search_term': queries}) else: return render(request, 'cases/search-medical.html')

Enter fullscreen mode Exit fullscreen mode

In short, the query string is passed via the URL (like https://example.com?q=kolkata). I grab this query string using request.GET.get('q'). After that, it is split into multiple queries (for example, 'Hello World' will be split into 'Hello' and World and thus be two different queries). Then, I query the User model using search_filter for all the queries and at the end, they are unionized and passed to the template.

This marks the end of all feature implementation I had in mind at the start of the hackathon. Let me know if you have any features that you would like to see in the web app!

Try It Out

To try it out, please create a patient account here and a medical account here (note that admin has to approve the medical accounts, so please wait a bit or you can also use the admin account mentioned below!).

Alternatively, you can use the following demo medical accounts:

  • devto-hospital
  • devto-diag
  • devto-pharmacy

the patient account:

  • devto-patient

and the admin account:

  • devto

Password for all of them is: medidocpass@abc

I would love to hear your feedback! Let me know what you think in the comments.

MediDoc: Paperless and Efficient Healthcare Management (7 Part Series)

1 MediDoc: What Got Done Till Now
2 MediDoc: Update 2 – Improve UI and Add User Functionality
3 more parts…
3 MediDoc: Update 3 – Admin Approval and Profile Page
4 MediDoc: Update 4 – Deployment
5 MediDoc: Update 5 – Small UI Tweaks
6 MediDoc: Update 6 – Search Medical Institutions
7 MediDoc: Efficient Paperless Medical Treatment Management System – DOHackathon Submission

原文链接:MediDoc: Update 6 – Search Medical Institutions

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
Don’t hurry say have no choice, perhaps, next intersection will meet hope.
不要急着说别无选择,也许、下个路口就会遇见希望
评论 抢沙发

请登录后发表评论

    暂无评论内容