저번에는 순환참조가 말썽이더니 이번에는 url관련.. 문제가 저를 괴롭히네요.

일단 에러 메세지는 다음과 같이 나옵니다. 

분명 매칭 url이 없을때 NoreverseMatch에러가 나오는 것으로 알고 있는데... 설정은 잘 맞게 한것 같은데 해결이 안됩니다.



에러메세지는 다음과 같습니다.





Models.py
from django.db import models
from django.urls import reverse
from django.db.models.signals import pre_save, post_save
from django.utils.text import slugify

class CompanyModel(models.Model):
    cmp_name = models.CharField(max_length=100)
    cmp_descript = models.TextField()
    cmp_email = models.EmailField()
    slug = models.SlugField(max_length=128)
    updated = models.DateTimeField(auto_now_add=True, auto_now=False)

    def __str__(self):
        return self.cmp_name

    def get_absolute_url(self): # reverse 함수 설정 *************
        return reverse('company_detail', kwargs={"slug":self.slug})
Views.py
from django.shortcuts import render
from .forms import CompanyForm
from .models import CompanyModel
from django.contrib.auth.decorators import login_required
from django.views.generic.base import TemplateView
from django.views.generic.detail import DetailView
from django.views.generic.list import ListView
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.urls import reverse


class CmpCreate(CreateView):
    form_class = CompanyForm
    template_name = "create.html"
    fields = ["cmp_name", "cmp_email", c"cmp_descript"]

    def get_success_url(self):
        return reverse("company-list")

class CompanyUpdateView(UpdateView):
    form_class = CompanyForm
    template_name = "create.html"

class CmpDetail(DetailView): #DetailView 설정
    model = CompanyModel

class CmpListView(ListView):
    model = CompanyModel
urls.py
from django.views.generic.base import TemplateView
from .views import DashboardTemplateView, CmpDetail, CmpListView, CmpCreate, CompanyUpdateView
from django.conf.urls import include
from django.urls import path
from . import views

#보기 편하게 하기 위해서 나머지 불필요한 url은 모두 주석처리 했습니다. 
urlpatterns = [
    #path('', views.home, name='home'),
    #path('about/', TemplateView.as_view(template_name="about.html"), name="about"),
    # path('about2/', DashboardTemplateView.as_view(), name='dashboard'),
    #path('company/create/', CmpCreate.as_view(), name="company-create"),
    #path('company/', CmpListView.as_view(), name="company-list"),
    path('company//', CmpDetail.as_view(), name="company_detail"), #디테일 뷰 slug를 찾지 못함. ********
    #path('company//update', CompanyUpdateView.as_view(), name="company_update"),
    #path('login/', TemplateView.as_view(template_name="login.html"), name="login"),
    #path('accounts/', include('registration.backends.default.urls')),
    #path('contact/', views.contact, name="contact")
]

분명 get_absolute_url 을 설정하고 그것을 자연스럽게 urls.py로 넘겨줬는데 왜 ReverseMatch 에러가 나는지 잘 이해를 하지 못하겠습니다... 도대체... 왜 그럴까요..ㅠㅜ




문제해결..


이번 문제도 너무나도 간단하게 풀려버렸습니다. askDjango의 이진석 님께서 조언을 해주셨는데요. 


Slug 필드를 확인을 해보았습니다. 



위 사진과 같이 SLUG 필드가 한개 빠져있더군요.


영문으로 쓰면 그것을 slugify로 변환을해서 저장을 하는데... 한글은 그게 안되는 것이였음.

하하.... 그래서 slug를 가져오지 못해서 에러가 나더군요. 


만약 한글로 저장을 하게 된다면 숫자로라도 Slug필드를 넣어야 겠습니다. 읕...