django rest框架功能基础视图如何通过字符串而不是ID获取对象

发布于 2025-01-30 16:29:03 字数 2718 浏览 4 评论 0原文

问题:我试图这样行驶 - > path('image/< str>',views.getimage,name ='imageCategory'),

按类别获取图像过滤器 - > http://127.0.0.1.1:8000/image/image/tv

#-->Model.py
from django.db import models


class Post(models.Model):
    Topic = models.CharField(max_length=250, default='')
    Desc = models.CharField(max_length=750, default='')
    Link = models.TextField(default='')

    def __str__(self):
        return str(self.Topic)


class Category(models.Model):
    categoryName = models.CharField(max_length=50, default='')

    def __str__(self):
        return str(self.categoryName)


class PostImage(models.Model):
    post = models.ForeignKey(
        Post, on_delete=models.CASCADE, null=True, related_name='post_name')
    category = models.ForeignKey(
        Category, on_delete=models.CASCADE, null=True, related_name='category_name')
    images = models.FileField(upload_to='images/')

    def __str__(self):
        return str(self.post)

#-->Serializer.py
from rest_framework.serializers import ModelSerializer
from rest_framework import serializers
from .models import Post, PostImage


class BlogSerializer(ModelSerializer):
    class Meta:
        model = Post
        fields = '__all__'


class ImageSerializer(ModelSerializer):
    topic_link = serializers.CharField(source='post.Link', read_only=True)
    Category = serializers.CharField(source='category', read_only=True)

    class Meta:
        model = PostImage
        fields = '__all__'

#-->view.py
from django.shortcuts import render
from rest_framework.decorators import api_view
from rest_framework.response import Response
from .models import Post, PostImage
from .Serializer import BlogSerializer, ImageSerializer
# Create your views here.


@api_view(['GET'])
def getNames(request):
    Blog = Post.objects.all()
    serializer = BlogSerializer(Blog, many=True)
    return Response(serializer.data)


@api_view(['GET'])
def getName(request, pk):
    Blog = Post.objects.get(id=pk)
    serializer = BlogSerializer(Blog, many=False)
    return Response(serializer.data)

#my problem part

@api_view(['GET'])
def getImage(request):
    image = PostImage.objects.get(Category=request.Category)
    serializer = ImageSerializer(image, many=True)
    return Response(serializer.data)

#-->urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('blogs/', views.getNames, name='blog'),
    path('blogs/<pk>', views.getName, name='blog'),
    path('Image/', views.getImage, name='image'),
    path('Image/<str>', views.getImage, name='imageCategory'),
]

Problem: I trying to path like this --> path('Image/<str>', views.getImage, name='imageCategory'),

to get image filter by category --> http://127.0.0.1:8000/Image/TV

#-->Model.py
from django.db import models


class Post(models.Model):
    Topic = models.CharField(max_length=250, default='')
    Desc = models.CharField(max_length=750, default='')
    Link = models.TextField(default='')

    def __str__(self):
        return str(self.Topic)


class Category(models.Model):
    categoryName = models.CharField(max_length=50, default='')

    def __str__(self):
        return str(self.categoryName)


class PostImage(models.Model):
    post = models.ForeignKey(
        Post, on_delete=models.CASCADE, null=True, related_name='post_name')
    category = models.ForeignKey(
        Category, on_delete=models.CASCADE, null=True, related_name='category_name')
    images = models.FileField(upload_to='images/')

    def __str__(self):
        return str(self.post)

#-->Serializer.py
from rest_framework.serializers import ModelSerializer
from rest_framework import serializers
from .models import Post, PostImage


class BlogSerializer(ModelSerializer):
    class Meta:
        model = Post
        fields = '__all__'


class ImageSerializer(ModelSerializer):
    topic_link = serializers.CharField(source='post.Link', read_only=True)
    Category = serializers.CharField(source='category', read_only=True)

    class Meta:
        model = PostImage
        fields = '__all__'

#-->view.py
from django.shortcuts import render
from rest_framework.decorators import api_view
from rest_framework.response import Response
from .models import Post, PostImage
from .Serializer import BlogSerializer, ImageSerializer
# Create your views here.


@api_view(['GET'])
def getNames(request):
    Blog = Post.objects.all()
    serializer = BlogSerializer(Blog, many=True)
    return Response(serializer.data)


@api_view(['GET'])
def getName(request, pk):
    Blog = Post.objects.get(id=pk)
    serializer = BlogSerializer(Blog, many=False)
    return Response(serializer.data)

#my problem part

@api_view(['GET'])
def getImage(request):
    image = PostImage.objects.get(Category=request.Category)
    serializer = ImageSerializer(image, many=True)
    return Response(serializer.data)

#-->urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('blogs/', views.getNames, name='blog'),
    path('blogs/<pk>', views.getName, name='blog'),
    path('Image/', views.getImage, name='image'),
    path('Image/<str>', views.getImage, name='imageCategory'),
]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

海夕 2025-02-06 16:29:03

首先,您需要在urls.py中设置参数名称。

urlpatterns = [
    ...
    path('Image/', views.getImages, name='image'),
    path('Image/<str:category>', views.getImage, name='imageCategory'),
]

在这里,类别应该是categoryName 类别的值模型。
接下来,在views.py中,您需要将该参数传递到getImage函数。
而且,您还需要为无类别的情况添加getImages函数。

@api_view(['GET'])
def getImage(request, category):
    image = PostImage.objects.filter(category__categoryName=category)
    serializer = ImageSerializer(image, many=True)
    return Response(serializer.data)

@api_view(['GET'])
def getImages(request):
    image = PostImage.objects.all()
    serializer = ImageSerializer(image, many=True)
    return Response(serializer.data)

First, you need to set the parameter name in urls.py.

urlpatterns = [
    ...
    path('Image/', views.getImages, name='image'),
    path('Image/<str:category>', views.getImage, name='imageCategory'),
]

Here the category should be the categoryName value of the Category model.
Next, in views.py, you need to pass that parameter to the getImage function.
And also you need to add getImages function for the case of no category.

@api_view(['GET'])
def getImage(request, category):
    image = PostImage.objects.filter(category__categoryName=category)
    serializer = ImageSerializer(image, many=True)
    return Response(serializer.data)

@api_view(['GET'])
def getImages(request):
    image = PostImage.objects.all()
    serializer = ImageSerializer(image, many=True)
    return Response(serializer.data)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文