save data

This commit is contained in:
aarizona 2024-05-29 18:02:43 +03:00
parent 14c0054d7f
commit 1dab0e2cc7
6 changed files with 67 additions and 14 deletions

View File

@ -9,15 +9,23 @@ class Partner(models.Model):
return f"Partner {self.id}" return f"Partner {self.id}"
class InventoryItem(models.Model):
id = models.AutoField(primary_key=True)
partner = models.ForeignKey(
Partner, related_name="Inventory", on_delete=models.CASCADE
)
class Element(models.Model): class Element(models.Model):
id = models.AutoField(primary_key=True) id = models.AutoField(primary_key=True)
external_id = models.CharField() external_id = models.CharField()
type = models.CharField(max_length=100) element_id = models.CharField(max_length=100)
photo = models.ImageField(upload_to=".") photo = models.ImageField(upload_to=".")
additional_text = models.TextField() additional_text = models.TextField()
partner = models.ForeignKey(
Partner, related_name="Element", on_delete=models.CASCADE inventory = models.ForeignKey(
InventoryItem, related_name="Element", on_delete=models.CASCADE
) )
def __str__(self): def __str__(self):
return f"Element {self.id} (Partner {self.partner.id})" return f"Element {self.id} (Inventory {self.inventory.id})"

View File

@ -1,5 +1,5 @@
from rest_framework import serializers from rest_framework import serializers
from .models import Partner, Element from .models import Element, InventoryItem, Partner
class PartnerSerializer(serializers.ModelSerializer): class PartnerSerializer(serializers.ModelSerializer):
@ -7,7 +7,12 @@ class PartnerSerializer(serializers.ModelSerializer):
model = Partner model = Partner
fields = ["id", "external_id"] fields = ["id", "external_id"]
class InventorySerializer(serializers.ModelSerializer):
class Meta:
model = InventoryItem
fields = ["id"]
class ElementSerializer(serializers.ModelSerializer): class ElementSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Element model = Element
fields = ["id", "external_id", "type", "photo", "additional_text", "partner"] fields = ["id", "external_id", "element_id", "photo", "additional_text", "inventory"]

View File

@ -8,8 +8,8 @@ from rest_framework.decorators import action
from rest_framework import status from rest_framework import status
from rest_framework.response import Response from rest_framework.response import Response
from .models import Element, Partner from .models import Element, InventoryItem, Partner
from .serializers import PartnerSerializer, ElementSerializer from .serializers import ElementSerializer, InventorySerializer, PartnerSerializer
import logging import logging
@ -84,9 +84,30 @@ class ElementViewSet(viewsets.ModelViewSet):
partner_object = Partner.objects.create(external_id=data["partner"]) partner_object = Partner.objects.create(external_id=data["partner"])
partner_serializer = PartnerSerializer(partner_object, many=False) partner_serializer = PartnerSerializer(partner_object, many=False)
# check if inventory exist
if (
"inventory" in data
and InventoryItem.objects.filter(id=data["inventory"]).exist()
):
inventory_object = InventoryItem.objects.get(id=data["inventory"])
else:
inventory_object = InventoryItem.objects.create(partner=partner_object)
inventory_serializer = InventorySerializer(inventory_object, many=False)
element_item = Element.objects.create(
inventory=inventory_object,
external_id=data["element"],
element_id=data["element_id"],
)
element_serializer = ElementSerializer(element_item, many=False)
return Response({"partner": partner_serializer.data}) return Response(
{
"partner": partner_serializer.data,
"inventory": inventory_serializer.data,
"element": element_serializer.data,
}
)
@action( @action(
detail=False, detail=False,

View File

@ -15,6 +15,10 @@
@apply text-lg; @apply text-lg;
} }
a[href]:not([class*=text]) {
@apply text-primary-500 hover:text-primary-600
}
.container { .container {
@apply grid grid-cols-12 mx-auto gap-4 @apply grid grid-cols-12 mx-auto gap-4
} }

View File

@ -12,6 +12,10 @@ const { data } = await useFetch<ApiTypeBase>(`${apiBase}/partner/`, { headers })
<UButton icon="i-heroicons-plus" to="organization/new">Новая инвентаризация</UButton> <UButton icon="i-heroicons-plus" to="organization/new">Новая инвентаризация</UButton>
</div> </div>
<div class="mb-4"> <div class="mb-4">
<UTable :rows="data?.results" /> <UTable :rows="data?.results">
<template #external_id-data="{ row }">
<NuxtLink :to="`/organization/p_${row.id}`">{{ row.external_id }}</NuxtLink>
</template>
</UTable>
</div> </div>
</template> </template>

View File

@ -1,3 +1,14 @@
<script setup lang="ts">
import { apiBase } from '~/helpers';
import type { ApiTypeBase } from '~/helpers';
const headers = new Headers();
headers.append("Content-Type", "application/json");
const route = useRoute()
const { data } = await useFetch<ApiTypeBase>(`${apiBase}/inventory?partner_id=${route.params.id}`, { headers })
</script>
<template> <template>
partner <UTable :rows="data?.results" />
</template> </template>