gpt4 book ai didi

python - 每当获取任何实体时添加计数 Django REST Framework

转载 作者:行者123 更新时间:2023-12-04 15:28:09 27 4
gpt4 key购买 nike

我的模型看起来像

class Article(models.Model):
article_type = models.ForeignKey(
ArticleType,
on_delete=models.CASCADE,
related_name='articles'
)

title = models.CharField(
max_length=100,
verbose_name='Article Title'
)

count = models.IntegerField(
verbose_name='Frequency Count'
)

def __str__(self):
return self.title

和我的 urls.py

router = DefaultRouter()
router.register('article', ArticleViewSet, basename='article')

urlpatterns = [
path('viewset/', include(router.urls)),
]

现在我不想添加任何文章都被获取的功能,即

http://127.0.0.1:8000/viewset/article/{pk}

id=pk 文章的 'count' 变成 count = count+1

这样我就可以根据这个计数对它们进行排序。

最佳答案

这可以通过在客户端获取 api 时从客户端发送类似 fetch=trueseen=true 的请求来实现,即客户端将发送给您fetch=true 每当从后端获取 api 时,您都必须捕获该标志并且必须检查 fetch=true 并增加 instance.count += 1 并保存模型中的更改。

CODE:首先通过为 count 字段提供默认值来更改您的模型,这次是 0。

class Article(models.Model):
article_type = models.ForeignKey(
ArticleType,
on_delete=models.CASCADE,
related_name='articles'
)

title = models.CharField(
max_length=100,
verbose_name='Article Title'
)

count = models.IntegerField(
verbose_name='Frequency Count',
default=0
)

def __str__(self):
return self.title

然后进行迁移。

然后是VIEW

class ArticleViewSet(viewsets.ViewSet):

def retrieve(self, request, pk=None):
queryset = Article.objects.all()
fetch = request.GET.get('fetch', False)
article = get_object_or_404(queryset, pk=pk)
if fetch:
article.count += 1
article.save()
serializer = ArticleSerializer(article)
return Response(serializer.data)

然后使用 article/1/?fetch=true 请求

你也可以不使用 fetch 标记

class ArticleViewSet(viewsets.ViewSet):

def retrieve(self, request, pk=None):
queryset = Article.objects.all()
article = get_object_or_404(queryset, pk=pk)
article.count += 1
article.save()
serializer = ArticleSerializer(article)
return Response(serializer.data)

现在请求 article/1/

关于python - 每当获取任何实体时添加计数 Django REST Framework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61850200/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com