【问题标题】:Django Rest Framework: urls with multiple slugsDjango Rest Framework:带有多个 slug 的 url
【发布时间】:2020-06-28 17:12:31
【问题描述】:

我正在为我的博客开发 API。每篇文章都与一个分类相关,那么一篇文章的 url 是这样的:"<slug:slug_category>/<slug:slug_post>/"。现在我的博客在没有 API 的情况下运行,并且之前的路径运行良好。

我需要与 API 有相同的路径,然后我创建了这个 api 视图:

@api_view(["GET"])
def blogPost_details_apiview(request, slug_post, slug_category):
    try:
        object = BlogPost.objects.get(slug_post=slug_post, slug_category=slug_category) 
    except BlogPost.DoesNotExist:
        return Response({"Error": {
            "code": 404,
            "message": "Article not found!"
        }},
        status=status.HTTP_404_NOT_FOUND)

    if request.method == "GET":
        serializer = BlogPostListSerializer(object)
        return Response(serializer.data)

这是 urls.py 中的代码:path('<slug:slug_category>/<slug:slug_post>/', views.blogPost_details_apiview, name="details-blogpost"),

我看到了这个错误:

字段错误在 /api/blog/gis/corso-applicivo-di-base-sistemi-informativi-territoriali/ 无法将关键字“slug_category”解析为字段。选择是: 附件, attachment_id, 类别, category_id, 内容, 描述、草稿、header_image、突出显示、id、publishing_date、 slug_post、标签、时间戳、标题、更新日期

我做错了什么? 我正在使用 Django 2.2

编辑: models.py

class CategoryBase(models.Manager):
    category_name = models.CharField(max_length=50unique=True)
    slug_category = models.SlugField(unique=True)

    def get_absolute_url(self):  
        return reverse("single_blogcategory", kwargs={"slug_category": self.slug_category})

class BlogPost(models.Manager):
    title = models.CharField(max_length=70, unique=True)
    slug_post = models.SlugField(max_length=70, unique=True)
    header_image = models.CharField(max_length=1000, null=True, blank=True)
    description = models.TextField(max_length=200, blank=True)
    contents = models.TextField()
    draft = models.BooleanField(default=False)    
    highlighted = models.BooleanField(default=False)
    category = models.ForeignKey(BlogCategory,on_delete=models.CASCADE, related_name="related_blogcategory")
    tags = models.ManyToManyField(BlogTag,related_name="related_blogtag", verbose_name="Tag")     
    attachment = models.ForeignKey(FileUpload, on_delete=models.CASCADE, related_name="related_attachment", null=True, blank=True)
    publishing_date = models.DateTimeField(default=timezone.now)
    updating_date = models.DateTimeField(auto_now=True)
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)

    def get_absolute_url(self):
        return reverse("single_blogpost", kwargs={
                                                "slug_post": self.slug_post,
                                                "slug_category": self.category.slug_category,
                                                })

【问题讨论】:

  • 请将BlogPost 模型添加到帖子中。看起来slug_category 不是此模型中的字段。
  • @AKS 现在你可以看到模型了

标签: django django-rest-framework django-views django-urls


【解决方案1】:

根据发布的模型,slug_category 不在BlogPost 上,而是在Category 上。请将您的代码更改为:

object = BlogPost.objects.get(
    slug_post=slug_post,
    category__slug_category=slug_category,
)

请注意,在第二行中,我们在通过外键连接的 category 字段上查找 slug_category

【讨论】:

  • 我忘记了与类别的联系...现在可以运行了,谢谢! :)
猜你喜欢
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
  • 2019-04-04
  • 2018-04-01
  • 2014-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多