Λίγο περίεργη μου φαίνεται αυτή η λύση...
Πάντως εγώ σε όσα Django applications έχω φτιάξει δεν είχα τέτοια προβλήματα. Αν ο host, τα py files και η database έχουν utf-8, δεν χρειάζονται αλχημείες ούτε στα views ούτε στα html files.
Εναλλακτικά μπορείς να χρησιμοποιήσεις το import unicode_litterals το οποίο είναι για python 2. Δεν ξέρω όμως αν σου κάνει και μέχρι ποιά έκδοση δουλεύει. Το Django έχει κάποια θέματα με compatibility των versions του.
Όσον αφορά την διασύνδεση των πινάκων, το Django είναι λίγο δύσχρηστο για να πάρεις πάνω από δύο πίνακες που συνδέονται μεταξύ τους.
Καλύτερα να κάνεις custom query, αλλιώς θα πέρνεις αρχικά τους πίνακες 1-2, μετά τους 2-3 κ.ο.κ. μεχρι να φτάσεις στο επιθυμητό επίπεδο.
Για custom query,κάτι σαν κι αυτό:
TABLE_NAME.objects.raw("SELECT ... INNER JOIN ... ON ...")
Υπάρχει κι αυτή η εναλλακτική:
from django.db.models import Q
question = TABLE_NAME.objects.filter(Q(lastname__contains=searchText)|
Q(firstname__contains=searchText) |
Q(phone1__contains=searchText)
TABLE_NAME.objects.select_related("YOUR FOREIGN KEY")
Κι εδώ όμως δεν ξέρω τι παίζει με το version compatibility.