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
暂无评论内容