serializer test
This commit is contained in:
parent
6137d78f3f
commit
93b60444ea
|
@ -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/terdeep', tmc_views.TerritoryItemViewSet)
|
||||||
router.register(r'api/tmc/items', tmc_views.CustomTableViewSet)
|
router.register(r'api/tmc/items', tmc_views.CustomTableViewSet)
|
||||||
router.register(r'api/tgbot', tgbot_views.TgItemViewSet)
|
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 = [
|
urlpatterns = [
|
||||||
path('', include(router.urls)),
|
path('', include(router.urls)),
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
|
from tmc.models import Territory
|
||||||
|
from tmc.serializers import TerritorySerializer
|
||||||
from .models import TgItem, TmcField
|
from .models import TgItem, TmcField
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
@ -12,7 +14,23 @@ class TgItemSerializer(serializers.ModelSerializer):
|
||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
depth = 3
|
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 TmcFieldSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = TmcField
|
model = TmcField
|
||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
|
|
|
@ -12,11 +12,13 @@ from rest_framework.response import Response
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
|
|
||||||
from django_filters.rest_framework import DjangoFilterBackend
|
from django_filters.rest_framework import DjangoFilterBackend
|
||||||
|
from django.db.models import Count
|
||||||
|
|
||||||
|
from tmc.models import TerritoryItem, Territory
|
||||||
from .tgbot import TgBot
|
from .tgbot import TgBot
|
||||||
from .updater import tg_bot_updater_instance
|
from .updater import tg_bot_updater_instance
|
||||||
from .models import TgItem, TmcField
|
from .models import TgItem, TmcElement, TmcField
|
||||||
from .serializers import TgItemSerializer, TmcFieldSerializer
|
from .serializers import TgItemSerializer, TmcFieldSerializer, TgStatItemSerializer
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
@ -119,3 +121,19 @@ class TmcFieldViewset(viewsets.ModelViewSet):
|
||||||
response = HttpResponse(image, content_type="image/jpeg")
|
response = HttpResponse(image, content_type="image/jpeg")
|
||||||
response["Content-Disposition"] = 'inline; filename="image.jpeg"'
|
response["Content-Disposition"] = 'inline; filename="image.jpeg"'
|
||||||
return response
|
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)
|
||||||
|
|
|
@ -12,6 +12,12 @@ const links = [
|
||||||
icon: 'i-heroicons-pencil',
|
icon: 'i-heroicons-pencil',
|
||||||
to: '/table'
|
to: '/table'
|
||||||
}
|
}
|
||||||
|
,
|
||||||
|
{
|
||||||
|
label: 'Статистика',
|
||||||
|
icon: 'i-heroicons-funnel',
|
||||||
|
to: '/stat'
|
||||||
|
}
|
||||||
]
|
]
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
<template>
|
||||||
|
123
|
||||||
|
</template>
|
|
@ -71,7 +71,7 @@ onMounted(async () => {
|
||||||
terdeep.value = [toRaw(state.location)]
|
terdeep.value = [toRaw(state.location)]
|
||||||
})
|
})
|
||||||
const patchField = async (field: { id: number, text: string }) => {
|
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 () => {
|
const patchItem = async () => {
|
||||||
await apiCall(`tgbot/${state.id}/`, 'patch', { name: state.name, location_id: state.location })
|
await apiCall(`tgbot/${state.id}/`, 'patch', { name: state.name, location_id: state.location })
|
||||||
|
|
|
@ -21,7 +21,7 @@ export const useAuthorsStore = defineStore('authors', {
|
||||||
return this.list[name]
|
return this.list[name]
|
||||||
},
|
},
|
||||||
async loadOneItem(name: string) {
|
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) {
|
if (result_data.length > 0 && result_data[0] !== null) {
|
||||||
this.list[name].status = 'success'
|
this.list[name].status = 'success'
|
||||||
this.list[name].result = result_data[0]
|
this.list[name].result = result_data[0]
|
||||||
|
|
|
@ -24,7 +24,7 @@ export const useImagesStore = defineStore('images', {
|
||||||
let file_url_data
|
let file_url_data
|
||||||
|
|
||||||
if (this.list[name].type == 'tg') {
|
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) {
|
if (file_url_data.length > 0 && file_url_data[0] !== null) {
|
||||||
this.list[name].status = 'success'
|
this.list[name].status = 'success'
|
||||||
this.list[name].result = file_url_data[0]
|
this.list[name].result = file_url_data[0]
|
||||||
|
@ -32,7 +32,7 @@ export const useImagesStore = defineStore('images', {
|
||||||
this.list[name].status = 'error'
|
this.list[name].status = 'error'
|
||||||
}
|
}
|
||||||
} else if (this.list[name].type == 'aws') {
|
} 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].result = URL.createObjectURL(file_url_data);
|
||||||
this.list[name].status = 'success'
|
this.list[name].status = 'success'
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue