serializer test

This commit is contained in:
Kseninia Mikhaylova 2024-08-19 17:06:59 +03:00
parent 6137d78f3f
commit 93b60444ea
8 changed files with 54 additions and 8 deletions

View File

@ -32,7 +32,8 @@ router.register(r'api/tmc/ter', tmc_views.TerritoryViewSet)
router.register(r'api/tmc/terdeep', tmc_views.TerritoryItemViewSet)
router.register(r'api/tmc/items', tmc_views.CustomTableViewSet)
router.register(r'api/tgbot', tgbot_views.TgItemViewSet)
router.register(r'api/tgbot/items', tgbot_views.TmcFieldViewset)
router.register(r'api/tgbot_items', tgbot_views.TmcFieldViewset)
router.register(r'api/stat', tgbot_views.TmcStatViewset, basename='stat')
urlpatterns = [
path('', include(router.urls)),

View File

@ -1,5 +1,7 @@
from rest_framework import serializers
from tmc.models import Territory
from tmc.serializers import TerritorySerializer
from .models import TgItem, TmcField
import logging
@ -12,7 +14,23 @@ class TgItemSerializer(serializers.ModelSerializer):
fields = "__all__"
depth = 3
class TgStatItemSerializer(serializers.Serializer):
# location = serializers.CharField()
location = serializers.SerializerMethodField()
inv_count = serializers.IntegerField()
def get_location(self, obj):
queryset = Territory.objects.get(id=obj.get('location__parent'))
serializer = TerritorySerializer(queryset)
return serializer.data
class Meta:
depth = 2
class TmcFieldSerializer(serializers.ModelSerializer):
class Meta:
model = TmcField
fields = "__all__"
fields = "__all__"

View File

@ -12,11 +12,13 @@ from rest_framework.response import Response
from rest_framework.decorators import action
from django_filters.rest_framework import DjangoFilterBackend
from django.db.models import Count
from tmc.models import TerritoryItem, Territory
from .tgbot import TgBot
from .updater import tg_bot_updater_instance
from .models import TgItem, TmcField
from .serializers import TgItemSerializer, TmcFieldSerializer
from .models import TgItem, TmcElement, TmcField
from .serializers import TgItemSerializer, TmcFieldSerializer, TgStatItemSerializer
import logging
@ -119,3 +121,19 @@ class TmcFieldViewset(viewsets.ModelViewSet):
response = HttpResponse(image, content_type="image/jpeg")
response["Content-Disposition"] = 'inline; filename="image.jpeg"'
return response
class TmcStatViewset(viewsets.ViewSet):
queryset = TgItem.objects.all().order_by("-created_at")
http_method_names = ["get"]
def list(self, request):
queryset = (
TgItem.objects.all()
.values("location__parent")
.annotate(
inv_count=Count("location__parent"),
)
)
serializer = TgStatItemSerializer(queryset, many=True)
return Response(serializer.data)

View File

@ -12,6 +12,12 @@ const links = [
icon: 'i-heroicons-pencil',
to: '/table'
}
,
{
label: 'Статистика',
icon: 'i-heroicons-funnel',
to: '/stat'
}
]
</script>
<template>

View File

@ -0,0 +1,3 @@
<template>
123
</template>

View File

@ -71,7 +71,7 @@ onMounted(async () => {
terdeep.value = [toRaw(state.location)]
})
const patchField = async (field: { id: number, text: string }) => {
await apiCall(`tgbot/items/${field.id}/`, 'patch', { text: field.text })
await apiCall(`tgbot_items/${field.id}/`, 'patch', { text: field.text })
}
const patchItem = async () => {
await apiCall(`tgbot/${state.id}/`, 'patch', { name: state.name, location_id: state.location })

View File

@ -21,7 +21,7 @@ export const useAuthorsStore = defineStore('authors', {
return this.list[name]
},
async loadOneItem(name: string) {
const result_data = await apiCall<string[]>(`tgbot/items/get_name/${name}/`)
const result_data = await apiCall<string[]>(`tgbot_items/get_name/${name}/`)
if (result_data.length > 0 && result_data[0] !== null) {
this.list[name].status = 'success'
this.list[name].result = result_data[0]

View File

@ -24,7 +24,7 @@ export const useImagesStore = defineStore('images', {
let file_url_data
if (this.list[name].type == 'tg') {
file_url_data = await apiCall<string[]>(`tgbot/items/get_image/${name}/`)
file_url_data = await apiCall<string[]>(`tgbot_items/get_image/${name}/`)
if (file_url_data.length > 0 && file_url_data[0] !== null) {
this.list[name].status = 'success'
this.list[name].result = file_url_data[0]
@ -32,7 +32,7 @@ export const useImagesStore = defineStore('images', {
this.list[name].status = 'error'
}
} else if (this.list[name].type == 'aws') {
file_url_data = await apiCall<string[]>(`tgbot/items/get_image_s3/${name}/`)
file_url_data = await apiCall<string[]>(`tgbot_items/get_image_s3/${name}/`)
this.list[name].result = URL.createObjectURL(file_url_data);
this.list[name].status = 'success'
}