Django 使来自不同表的多个get_absolute_url在一个视图中工作

Django 使来自不同表的多个get_absolute_url在一个视图中工作,django,django-models,django-views,Django,Django Models,Django Views,您好,我正在尝试从不同的表中获取两个get_absolute_url,以在一个基于类的视图中工作,但它似乎只获取第一个 错误消息是: 字段“Product\u id”需要一个号码,但得到了“phones”。 my views.py: class ProductListView(ListView): model= models.Product context_object_name = 'product_list' template_name = 'store/produc

您好,我正在尝试从不同的表中获取两个get_absolute_url,以在一个基于类的视图中工作,但它似乎只获取第一个

错误消息是:

字段“Product\u id”需要一个号码,但得到了“phones”。 my views.py:

class ProductListView(ListView):
    model= models.Product
    context_object_name = 'product_list'
    template_name = 'store/product_list.html'

    def get_context_data(self, **kwargs):
        context=super().get_context_data(**kwargs)
        context['cat'] = Category.objects.all()
        return context
My urls.py(slug部分不工作):

"


请索取您可能需要的更多代码。谢谢

产品和类别模型的
获取绝对url
是什么样子的?url也很奇怪,因为第一条路径将匹配所有其他路径,因此这意味着它将始终触发
ProdView
视图,而不是其他的。@WillemVanOnsem我已经更新了it@WillemVanOnsem很抱歉,我以前在url中更改了一些内容,但它似乎也不起作用
from django.urls import path, re_path
from store import views
app_name = 'store'

urlpatterns = [
    re_path(r'^(?P<pk>[\w-]+)/$', views.ProdView.as_view(),name='prod'),
    path('signup', views.SignUpView.as_view(), name='signup'),
    path('<slug>/', views.CategoryList.as_view(), name='cat'),
    path('search', views.SearchListView.as_view(), name='search_results'),
    path('change_password', views.PassChange.as_view(), name='passchange'),
    path('reset_password', views.PassReset.as_view(), name='passreset'),
    path('logout', views.user_logout,name='logout'),
    path('user_login', views.user_login, name='user_login'),
]
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">

    <title></title>
  </head>
  <body>
    <div class="jumbotron">

      <form action="{% url 'store:search_results' %}" method="get">
        <input name='q' type='text' placeholder="Search products..">
      </form>

      {% for cate in cat %}
            <h3><li><a href="{{cat.get_absolute_url}}">{{cate.Category_name}}</a></li></h3>

      {% endfor %}


  <h1>These are the products</h1>
    <ol>
      {% for product in product_list %}
        <h2><li><a href="{{product.get_absolute_url}}">{{product.Product_name}} </a></li></h2>

      {% endfor %}
    </ol>
    {% if user.is_authenticated %}
      Hi !
      <p><a href="{% url 'store:logout' %}">Log Out</a></p>
      <p><a href="{% url 'store:passchange' %}">change password</a></p>
      <p><a href="{% url 'store:passreset' %}">reset password</a></p>

    {% else %}
      <p>You are not logged in</p>
      <a href="{% url 'store:user_login' %}">Log In</a>
      <a href="{% url 'store:signup' %}">Sign Up</a>
    {% endif %}
</div>



  </body>
</html>
class Category(models.Model):
    Category_name = models.CharField(max_length=248, primary_key=True)
    Sub_category =models.CharField(max_length=248, null=True, blank=True)
    slug = models.SlugField(unique=True, blank=True) #find out about get_absolute_url

    def save(self, *args, **kwargs):
        self.slug = slugify(self.Category_name)
        super(Category, self).save(*args, **kwargs)

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

    class Meta:
        verbose_name = 'Category'
        verbose_name_plural = 'Categories'


class Product(models.Model):
    Product_id = models.IntegerField(primary_key=True)
    Product_name = models.CharField(max_length=100)
    Product_image = models.ImageField(null=True,blank=True)
    Price = models.DecimalField(max_digits=12, decimal_places=2)
    discount_price = models.DecimalField(null=True, max_digits=12, decimal_places=2)
    Quantity = models.PositiveIntegerField()
    description = models.TextField(null=True)
    category = models.ManyToManyField(Category)

    def get_absolute_url(self):
        return reverse('store:prod',kwargs={'pk':self.Product_id})

    def __str__(self):
        return self.Product_name


    class Meta:
        indexes = [
            models.Index(fields=['Product_id'], name='Product_id'),
                   ]
        verbose_name = 'Product'
        verbose_name_plural = 'Products