繁体   English   中英

按 slug 过滤 django 查询集

[英]Filtering django queryset by slug

我也想用 slug 过滤 Post 对象,go 应该如何处理? model 如下所示:

class Post(models.Model):
    slug = models.SlugField()
    title = models.CharField(max_length=100)
    post_json = models.CharField(max_length=100000, blank=True, null=True)
    author = models.ForeignKey(User, on_delete=models.CASCADE)

视图看起来像这样。

def load_post_json(request):
    obj = Post.objects.filter(author_id=request.user.id)
    data = list(obj.values())
    return JsonResponse({'posts': data})

url ,您可以捕获 slug:

# app/urls.py

from django.urls import path
from app.views import load_post_json

urlpatterns = [
    # …
    path('post/<slug:slug>/', load_post_json, name='post_json'),
    # …
]

然后在您看来,您可以在 slug 中进行过滤:

# app/views.py

from django.contrib.auth.decorators import login_required

@login_required
def load_post_json(request, slug):
    obj = Post.objects.filter(author_id=request.user.id, slug=slug)
    data = list(obj.values())
    return JsonResponse({'posts': data})

话虽如此,最好使用Django REST 框架来定义 API。 这具有序列化程序等工具,因此可以更方便地定义视图集以获取项目列表、创建新项目等。

注意:您可以使用@login_required装饰器 [Django-doc]将视图限制为经过身份验证的用户的视图。

你的意思是你也想按slug过滤?

如果您将其作为查询参数提交,只需编写:

def load_post_json(request):
slug_name= request.data.get('slug_name')
obj = Post.objects.filter(author_id=request.user.id, slug=slug_name)
data = list(obj.values())
return JsonResponse({'posts': data})

如果要从 URL 中提取它,请在urls.py文件中的urlpatterns上捕获它:

   urlpatterns = [
    # …
    path('post/<slug_name:slug_name>/', load_post_json),
    # …
    ]

然后,在load_post_json function 中将其作为 function 参数获取:

   def load_post_json(request, slug_name):
     ...

这是另一种替代方式,

# app/urls.py

from django.urls import path
from app.views import load_post_json

urlpatterns = [
    # …
    path('post/', load_post_json, name='post_json'),
    # …
]

和views.py

# app/views.py

from django.contrib.auth.decorators import login_required

@login_required
def load_post_json(request):
    slug = request.GET.get('slug', None)
    obj = Post.objects.filter(author_id=request.user.id, slug=slug)
    data = list(obj.values())
    return JsonResponse({'posts': data})

和 url 端点,

/post/?slug=<your slug here>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM