save partner to db
This commit is contained in:
parent
e1e353bc51
commit
8c7e4332dd
|
@ -3,14 +3,15 @@ from django.db import models
|
|||
|
||||
class Partner(models.Model):
|
||||
id = models.AutoField(primary_key=True)
|
||||
external_id = models.CharField()
|
||||
|
||||
def __str__(self):
|
||||
return f" partner {self.id}"
|
||||
return f"Partner {self.id}"
|
||||
|
||||
|
||||
class Element(models.Model):
|
||||
id = models.AutoField(primary_key=True)
|
||||
external_id = models.IntegerField()
|
||||
external_id = models.CharField()
|
||||
type = models.CharField(max_length=100)
|
||||
photo = models.ImageField(upload_to=".")
|
||||
additional_text = models.TextField()
|
||||
|
|
|
@ -5,7 +5,7 @@ from .models import Partner, Element
|
|||
class PartnerSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Partner
|
||||
fields = ["id"]
|
||||
fields = ["id", "external_id"]
|
||||
|
||||
class ElementSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
|
|
|
@ -24,6 +24,13 @@ class PartnerViewSet(viewsets.ModelViewSet):
|
|||
queryset = Partner.objects.all()
|
||||
serializer_class = PartnerSerializer
|
||||
|
||||
def create(self, validated_data):
|
||||
logger.info("create")
|
||||
super().create(**validated_data)
|
||||
|
||||
def get(self, request, **kwargs):
|
||||
logger.info("get")
|
||||
|
||||
@action(detail=False, methods=["get"], url_path=r"external")
|
||||
def get_remote_partners(self, request):
|
||||
params = {
|
||||
|
@ -67,6 +74,20 @@ class ElementViewSet(viewsets.ModelViewSet):
|
|||
queryset = Element.objects.all()
|
||||
serializer_class = ElementSerializer
|
||||
|
||||
def create(self, request, **kwargs):
|
||||
data = request.data
|
||||
|
||||
# check if partner exist
|
||||
if Partner.objects.filter(external_id=data["partner"]).exists():
|
||||
partner_object = Partner.objects.get(external_id=data["partner"])
|
||||
else:
|
||||
partner_object = Partner.objects.create(external_id=data["partner"])
|
||||
partner_serializer = PartnerSerializer(partner_object, many=False)
|
||||
|
||||
|
||||
|
||||
return Response({"partner": partner_serializer.data})
|
||||
|
||||
@action(
|
||||
detail=False,
|
||||
methods=["get"],
|
||||
|
|
|
@ -10,7 +10,8 @@
|
|||
"@nuxt/ui": "^2.16.0",
|
||||
"nuxt": "^3.11.2",
|
||||
"vue": "^3.4.27",
|
||||
"vue-router": "^4.3.2"
|
||||
"vue-router": "^4.3.2",
|
||||
"yup": "^1.4.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"sass": "^1.77.2"
|
||||
|
@ -9506,6 +9507,11 @@
|
|||
"node": ">= 6"
|
||||
}
|
||||
},
|
||||
"node_modules/property-expr": {
|
||||
"version": "2.0.6",
|
||||
"resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz",
|
||||
"integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA=="
|
||||
},
|
||||
"node_modules/protocols": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz",
|
||||
|
@ -10922,6 +10928,11 @@
|
|||
"node": ">=0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/tiny-case": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz",
|
||||
"integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q=="
|
||||
},
|
||||
"node_modules/tiny-invariant": {
|
||||
"version": "1.3.3",
|
||||
"resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
|
||||
|
@ -10954,6 +10965,11 @@
|
|||
"node": ">=0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/toposort": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz",
|
||||
"integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg=="
|
||||
},
|
||||
"node_modules/totalist": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
|
||||
|
@ -12162,6 +12178,28 @@
|
|||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/yup": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/yup/-/yup-1.4.0.tgz",
|
||||
"integrity": "sha512-wPbgkJRCqIf+OHyiTBQoJiP5PFuAXaWiJK6AmYkzQAh5/c2K9hzSApBZG5wV9KoKSePF7sAxmNSvh/13YHkFDg==",
|
||||
"dependencies": {
|
||||
"property-expr": "^2.0.5",
|
||||
"tiny-case": "^1.0.3",
|
||||
"toposort": "^2.0.2",
|
||||
"type-fest": "^2.19.0"
|
||||
}
|
||||
},
|
||||
"node_modules/yup/node_modules/type-fest": {
|
||||
"version": "2.19.0",
|
||||
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
|
||||
"integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
|
||||
"engines": {
|
||||
"node": ">=12.20"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/zhead": {
|
||||
"version": "2.2.4",
|
||||
"resolved": "https://registry.npmjs.org/zhead/-/zhead-2.2.4.tgz",
|
||||
|
|
|
@ -13,7 +13,8 @@
|
|||
"@nuxt/ui": "^2.16.0",
|
||||
"nuxt": "^3.11.2",
|
||||
"vue": "^3.4.27",
|
||||
"vue-router": "^4.3.2"
|
||||
"vue-router": "^4.3.2",
|
||||
"yup": "^1.4.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"sass": "^1.77.2"
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
<script setup lang="ts">
|
||||
import { object, string, type InferType } from 'yup'
|
||||
import { apiBase } from '~/helpers';
|
||||
import type { ApiTypeExternal } from '~/helpers';
|
||||
import type { FormSubmitEvent } from '#ui/types'
|
||||
|
||||
type ExternalDataType = {
|
||||
partner?: ApiTypeExternal[],
|
||||
|
@ -25,9 +27,16 @@ const external_data = reactive<ExternalDataType>({
|
|||
categories: [],
|
||||
element: [],
|
||||
})
|
||||
const schema = object({
|
||||
element: string().required('Required'),
|
||||
element_id: string().required('Required')
|
||||
})
|
||||
type Schema = InferType<typeof schema>
|
||||
|
||||
async function onSubmit(event: FormSubmitEvent<Schema>) {
|
||||
// Do something with event.data
|
||||
console.log(event.data)
|
||||
const data = $fetch(`${apiBase}/element/`, { method: 'POST', body: JSON.stringify(event.data) })
|
||||
console.log(data)
|
||||
}
|
||||
|
||||
const searchInExternal = (q: string) => {
|
||||
|
@ -111,7 +120,7 @@ onMounted(async () => {
|
|||
<UInput placeholder="ID" v-model="state.element_id" />
|
||||
</UFormGroup>
|
||||
|
||||
<UButton type="submit">
|
||||
<UButton type="submit" :disabled="!state.element_id">
|
||||
Сохранить
|
||||
</UButton>
|
||||
</UForm>
|
||||
|
|
Loading…
Reference in New Issue