【发布时间】:2022-01-21 03:22:24
【问题描述】:
我正在处理一个根据类别过滤新闻的网址。所以我所做的就是以127.0.0.1:8000/news/category/sports/ 或127.0.0.1:8000/news/category/entertainment/ 的这种方式在 url 中传递类别的名称。这是我的代码 sn-p
views.py
class CategoryAPI(viewsets.ModelViewSet):
serializer_class = CategorySerializer
# lookup_field = 'slug'
# permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
def get_queryset(self):
category = Category.objects.all()
return category
@action(methods=['get'], detail=False, url_path=r'list/(?P<name>[\w-]+', url_name='category')
def get_category(self, request, category=None):
return Category.objects.all().order_by(name)
class PostAPI(viewsets.ModelViewSet):
serializer_class = PostSerializer
# permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
def get_queryset(self):
news_post = News.objects.all()
return news_post
serializers.py
class PostSerializer(serializers.ModelSerializer):
likes = serializers.SerializerMethodField(read_only=True)
dislikes = serializers.SerializerMethodField(read_only=True)
views = serializers.SerializerMethodField(read_only=True)
# author = serializers.StringRelatedField()
# category = serializers.StringRelatedField()
def get_likes(self, obj):
return obj.likes.count()
def get_dislikes(self, obj):
return obj.dislikes.count()
def get_views(self, obj):
return obj.views.count()
class Meta:
model = News
fields = ('id','category','post_type','title','content','hash_tags','source','author','views',
'likes','dislikes','status')
class CategorySerializer(serializers.ModelSerializer):
posts = PostSerializer(many=True, read_only=True)
parent = serializers.StringRelatedField()
class Meta:
model = Category
fields = ['name', 'slug', 'parent','posts']
urls.py
router = DefaultRouter()
router.register('news', views.PostAPI, basename='news'),
router.register('category', views.CategoryAPI, basename='category'),
router.register('news-images', views.NewsImageAPI, basename='news-image'),
router.register('comment-room', views.CommentRoomAPI, basename='comment-room'),
router.register('comment', views.CommentAPI, basename='comment')
urlpatterns = [
]
urlpatterns += router.urls
所以我想要做的就是在 url 中传递类别的名称,而不是如何动态创建它。否则我需要为每个类别创建一个 url。
例如:127.0.0.1:8000/news/category/health/,127.0.0.1:8000/news/category/business/
那么我该如何避免呢。我需要你们的帮助。谢谢。
【问题讨论】:
标签: django django-models django-rest-framework django-views django-urls