У меня есть сообщение об ошибке при попытке использовать поле slug, которое содержит необычный символ

Моя БД, моя модель и мое представление определены для использования символов юникода. Создание записи происходит нормально, и slug создается правильно со значением, например, corée. Проблема возникает сразу после создания с сообщением об ошибке NoReverse match. Я просмотрел документацию, но не понимаю, что я делаю не так. Спасибо за поддержку.

Model:
class Countrycode(models.Model):
    cou_code = models.CharField(
        "Country name", max_length=40, primary_key=True)
    cou_recblocked = models.BooleanField("Country record blocked")
    cou_creator = models.ForeignKey(
        User, on_delete=models.PROTECT, related_name='+', verbose_name="Created by")
    cou_creationdate = models.DateTimeField("Creation date", auto_now=True)
    cou_modifier = models.ForeignKey(
        User, on_delete=models.PROTECT, related_name='+', verbose_name="Last modification by")
    cou_modified = models.DateTimeField(
        "Last modification date", auto_now=True)
    slug = models.SlugField(max_length=50, allow_unicode=True)

    class Meta:
        ordering = ["cou_code"] 

    def __str__(self):
        return self.cou_code

    def get_absolute_url(self):
        return reverse('countrycode_update', kwargs={'slug': self.slug})

View:
from masterdat.models import Countrycode
#-----------------------
# List view Management
#-----------------------
class CountrycodeListView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
    permission_required = 'masterdat.view_countrycode'
    
    model = Countrycode
    paginate_by = 10

    def get_context_data(self, *args, **kwargs):
        context = super().get_context_data(*args, **kwargs)
        return context

# Search bar
    def get_queryset(self):
        result = super(CountrycodeListView, self).get_queryset()

        query = self.request.GET.get('q')
        if query:
            query_list = query.split()
            result = result.filter(
                reduce(operator.and_,
                    (Q(cou_code__icontains=q) for q in query_list))
            )

        return result
#-----------------------------------
# Create and Update Views Management
#-----------------------------------
from masterdat.forms import CountrycodeForm

# Create View -----------
class CountrycodeCreateView(LoginRequiredMixin, PermissionRequiredMixin, CreateView):
    permission_required = 'masterdat.add_countrycode'

    model = Countrycode
    form_class = CountrycodeForm
    success_url = reverse_lazy('countrycode_list')

    def form_valid(self, form):
        form.instance.slug = slugify(form.instance.cou_code, allow_unicode=True)
        form.instance.cou_creator = self.request.user
        form.instance.cou_modifier = self.request.user
        form.save
        return super().form_valid(form)

# Update View -----------
class CountrycodeUpdateView(LoginRequiredMixin, PermissionRequiredMixin, UpdateView):
    permission_required = 'masterdat.change_countrycode'

    model = Countrycode
    form_class = CountrycodeForm
    success_url = reverse_lazy('countrycode_list')

    def form_valid(self, form):
        form.instance.cou_modifier = self.request.user
        form.save
        return super().form_valid(form)

Регулярное выражение (?P[-a-zA-Z0-9_]+) будет соответствовать только "cor", потому что "é" не входит в диапазон "A-Z" или "a-z".

Вы можете изменить его на (?P[-\w0-9_]+) для соответствия символам, отличным от символов ASCII.

Вернуться на верх