Skip to content

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

@Mortal

Description

@Mortal

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)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions