TK-IT / web

TÅGEKAMMERETs hjemmeside i Django. Både offentlig og intern
https://TAAGEKAMMERET.dk
Other
2 stars 3 forks source link

Django-admin søgning giver HTTP 500 med ikke-Latin1 tegn #240

Open Mortal opened 5 years ago

Mortal commented 5 years ago

Når man besøger eks. https://taagekammeret.dk/admin/idm/profile/?q=%E2%81%B8

OperationalError at /admin/idm/profile/
(1267, "Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'like'")

Vi kan evt. lave en workaround ved at udvide alle vores ModelAdmin med en søge-metode der returnerer qs.empty() hvis søgestrengen indeholder ikke-Latin1 tegn. Her er en skitse:

class Latin1Search(admin.ModelAdmin):
    def get_search_results(self, request, queryset, search_term):
        try:
            search_term.encode('latin1')
        except UnicodeEncodeError:
            return queryset.empty()
        return super().get_search_results(request, queryset, search_term)

# Eksisterende ModelAdmin subclasses skal bruge Latin1Search som mixin.
# Dvs. i idm/admin.py:
class ProfileAdmin(admin.ModelAdmin, Latin1Search):
    # ... samme implementation som før

admin.site.register(Profile, ProfileAdmin)

# Hvor vi før brugte vanilla ModelAdmin skal vi bruge Latin1Search.
# Dvs. i uniprint/admin.py:
admin.site.register(Document, Latin1Search)
neic commented 5 years ago

Er det grundlæggende problem ikke at databasen er latin1 og ikke utf8 (eller utf8mb4)? Se også #199.

Mortal commented 5 years ago

Er det grundlæggende problem ikke at databasen er latin1 og ikke utf8 (eller utf8mb4)?

Jo, det er korrekt