【问题标题】:Django generating multiple urls for the same subcategoryDjango 为同一子类别生成多个 url
【发布时间】:2020-08-18 19:00:43
【问题描述】:

在我的应用程序中,有一个具有 ForeignKey 关系的类别和子类别列表。说,有:

  • 与 Category1 相关的 Subcategory1
  • 与 Category2 相关的 Subcategory2

我希望获得以下子类别网址:

这些网址工作正常。但是,django 也会生成这些我不需要的 url:

为什么它们会出现在我的应用中?我该如何摆脱它们?提前致谢!

models.py:

class Category(models.Model):
    categoryslug = models.SlugField(max_length=200, default="",unique=True)

    def get_absolute_url(self):
        return reverse("showrooms_by_category",kwargs={'categoryslug': str(self.categoryslug)})

class Subcategory(models.Model):
    subcategoryslug = models.SlugField(max_length=200, default="",unique=True)
    category = models.ForeignKey('Category', related_name='subcategories', 
    null=True, blank=True, on_delete = models.CASCADE)

    def get_absolute_url(self):
        return reverse("showrooms_by_subcategory",
        kwargs={'categoryslug': str(self.category.categoryslug), 'subcategoryslug': str(self.subcategoryslug)})

views.py:

class ShowroomCategoryView(DetailView):
    model = Category
    context_object_name = 'showrooms_by_category'
    template_name = "website/category.html"
    slug_field = 'categoryslug'
    slug_url_kwarg = 'categoryslug'


class ShowroomSubcategoryView(DetailView):
    model = Subcategory
    context_object_name = 'showrooms_by_subcategory'
    template_name = "website/subcategory.html"
    slug_field = 'subcategoryslug'
    slug_url_kwarg = 'subcategoryslug'

urls.py:

urlpatterns = [
    path('<slug:categoryslug>/<slug:subcategoryslug>/', views.ShowroomSubcategoryView.as_view(), name='showrooms_by_subcategory'),
    path('<slug:categoryslug>/', views.ShowroomCategoryView.as_view(), name='showrooms_by_category'),
]

【问题讨论】:

  • “生成”是什么意思? Django 尝试解析路径:如果它解析了无效的 cat-subcat 组合的路径,只需在视图中引发 Http404
  • 感谢您的建议,我会研究这个。如果您能给我一点提示,我将不胜感激。我应该使用哪种方法?你能给我举个例子吗?

标签: python django django-urls


【解决方案1】:

我认为原因是foreign_key。因此,我认为您可以使用一对一的字段来获取目标,例如:

subcategoryslug = models.SlugField(max_length=200, default="",unique=True)
category = models.OneToOneField('Category', related_name='subcategories',null=True, blank=True, on_delete = models.CASCADE)

*注意:- 请理解其背后的逻辑。为此,请进行更多研究。

【讨论】:

  • 在研究我的问题时,我发现了一个非常清楚的关系解释:stackoverflow.com/questions/25386119/… 在我的例子中,许多子类别可能与一个类别相关。所以,我相信 OneToOne 不适合我,对吧?
猜你喜欢
  • 1970-01-01
  • 2011-11-05
  • 2018-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
相关资源
最近更新 更多