我有一个错误消息,试图使用一个包含不寻常字符的字段



我的DB (MariaDB)设置为utf8mb4,我的模型和视图都定义为使用unicode字符。记录的创建是正确的,并正确地创建了带有值(例如corsamade)的段鼻涕虫。该问题在创建后立即抛出NoReverse匹配错误消息。我看了一下文档,但我不明白我做错了什么。谢谢您的支持。

NoReverseMatch at/masterdat/countrycode/没有找到带有关键字参数"{'slug': ' cor'}"的'countrycode_update'的反转。1模式(s)尝试:[' masterdat countrycode/(? P [-a-zA-Z0-9_] +)/美元)请求方法:GET请求URL: http://127.0.0.1:8000/masterdat/countrycode/Django版本:3.2.5异常类型:NoReverseMatch异常值:
没有找到'countrycode_update'的反向关键字参数'{'slug': ' cor'}'。1模式(s)尝试:[' masterdat countrycode/P [-a-zA-Z0-9 (? _]+)/$']

URL:    
from django.urls import path
from masterdat import views
from masterdat.views import CountrycodeListView
from masterdat.views import CountrycodeCreateView, CountrycodeUpdateView 
urlpatterns = [
path('masterdathome/', views.masterdathome, name='masterdathome'),
path('countrycode/', CountrycodeListView.as_view(), 
name='countrycode_list'),
path('countrycode/add/', CountrycodeCreateView.as_view(), 
name='countrycode_add'),
path('countrycode/<slug:slug>/', CountrycodeUpdateView.as_view(), 
name='countrycode_update'),    
]
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_]+)只匹配"因为"e"不属于" a - z "或"a-z" .

您可以将其更改为(?P[-w0-9_]+)以匹配非ascii字符。

相关内容

  • 没有找到相关文章

最新更新