mirror of
https://github.com/magnum-opus-tender-hack/backend.git
synced 2024-11-22 09:16:36 +03:00
added load, models for Products and Categories
This commit is contained in:
parent
dbd347d71e
commit
54abe284b9
|
@ -5,17 +5,17 @@ class SearchSerializer(serializers.Serializer):
|
||||||
body = serializers.CharField(max_length=200)
|
body = serializers.CharField(max_length=200)
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
raise NotImplemented
|
raise NotImplementedError
|
||||||
|
|
||||||
def update(self, instance, validated_data):
|
def update(self, instance, validated_data):
|
||||||
raise NotImplemented
|
raise NotImplementedError
|
||||||
|
|
||||||
|
|
||||||
class ResponseSerializer(serializers.Serializer):
|
class ResponseSerializer(serializers.Serializer):
|
||||||
results = serializers.JSONField()
|
results = serializers.JSONField()
|
||||||
|
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
raise NotImplemented
|
raise NotImplementedError
|
||||||
|
|
||||||
def update(self, instance, validated_data):
|
def update(self, instance, validated_data):
|
||||||
raise NotImplemented
|
raise NotImplementedError
|
||||||
|
|
|
@ -1,9 +1,37 @@
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
|
||||||
|
|
||||||
|
class Characteristic(models.Model):
|
||||||
|
name = models.CharField("Имя", unique=True, blank=False, max_length=250)
|
||||||
|
value = models.CharField("Значение", blank=False, max_length=250)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return str(self.name)
|
||||||
|
|
||||||
|
def serialize_self(self):
|
||||||
|
return {"name": self.name, "value": self.value}
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
db_table = "Characteristic"
|
||||||
|
|
||||||
|
|
||||||
|
class UnitCharacteristic(models.Model):
|
||||||
|
name = models.CharField("Имя", blank=False, max_length=250)
|
||||||
|
value = models.CharField("Значение", blank=False, max_length=250)
|
||||||
|
unit = models.CharField("Размерность", blank=False, max_length=250)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return str(self.name)
|
||||||
|
|
||||||
|
def serialize_self(self):
|
||||||
|
return {"name": self.name, "value": self.value, "unit": self.unit}
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
db_table = "UnitCharacteristic"
|
||||||
|
|
||||||
|
|
||||||
class Category(models.Model):
|
class Category(models.Model):
|
||||||
name = models.CharField("Имя", unique=True, blank=False, max_length=250)
|
name = models.CharField("Имя", unique=True, blank=False, max_length=250)
|
||||||
value = models.CharField("Имя", unique=True, blank=False, max_length=250)
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return str(self.name)
|
return str(self.name)
|
||||||
|
@ -17,28 +45,51 @@ class Product(models.Model):
|
||||||
"ID CTE", primary_key=True, unique=True, blank=False, null=False, db_index=True
|
"ID CTE", primary_key=True, unique=True, blank=False, null=False, db_index=True
|
||||||
)
|
)
|
||||||
name = models.CharField("Название CTE", unique=True, blank=False, max_length=250)
|
name = models.CharField("Название CTE", unique=True, blank=False, max_length=250)
|
||||||
characteristic = models.JSONField("Характеристики")
|
category = models.ForeignKey(
|
||||||
|
Category, related_name="products", on_delete=models.CASCADE
|
||||||
|
)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return str(self.name)
|
return str(self.name)
|
||||||
|
|
||||||
def serialize_self(self) -> dict:
|
def serialize_self(self) -> dict:
|
||||||
return {
|
return {
|
||||||
'name': self.name,
|
"name": self.name,
|
||||||
'characteristic': self.characteristic,
|
"characteristic": [
|
||||||
|
x.serialize_self() for x in self.characteristics.objects.all()
|
||||||
|
]
|
||||||
|
+ [x.serialize_self() for x in self.unit_characteristics.objects.all()],
|
||||||
}
|
}
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
db_table = "Product"
|
db_table = "Product"
|
||||||
|
|
||||||
|
|
||||||
class ProductInCategory(models.Model):
|
class ProductCharacteristic(models.Model):
|
||||||
product = models.ForeignKey(
|
product = models.ForeignKey(
|
||||||
Product, related_name="categories", on_delete=models.CASCADE
|
Product, related_name="characteristics", on_delete=models.CASCADE
|
||||||
)
|
)
|
||||||
category = models.ForeignKey(
|
characteristic = models.ForeignKey(
|
||||||
Category, related_name="products", on_delete=models.CASCADE
|
Characteristic, related_name="products", on_delete=models.CASCADE
|
||||||
)
|
)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.product} in {self.category}"
|
return f"{self.product} in {self.characteristic}"
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
db_table = "ProductCharacteristic"
|
||||||
|
|
||||||
|
|
||||||
|
class ProductUnitCharacteristic(models.Model):
|
||||||
|
product = models.ForeignKey(
|
||||||
|
Product, related_name="unit_characteristics", on_delete=models.CASCADE
|
||||||
|
)
|
||||||
|
characteristic = models.ForeignKey(
|
||||||
|
UnitCharacteristic, related_name="products", on_delete=models.CASCADE
|
||||||
|
)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"{self.product} in {self.characteristic}"
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
db_table = "ProductUnitCharacteristic"
|
||||||
|
|
25
app/search/services/load_products.py
Normal file
25
app/search/services/load_products.py
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
from ast import literal_eval
|
||||||
|
|
||||||
|
import pandas as pd
|
||||||
|
|
||||||
|
from search.models import Product, Category
|
||||||
|
|
||||||
|
|
||||||
|
def load():
|
||||||
|
with open("data.json", "r", encoding="utf-16") as f:
|
||||||
|
data = literal_eval(f.read())
|
||||||
|
|
||||||
|
for el in data:
|
||||||
|
Product.objects.get_or_create(id=el)
|
||||||
|
print(el["characteristic"])
|
||||||
|
|
||||||
|
|
||||||
|
def load_excel():
|
||||||
|
df = pd.read_excel("data1.xlsx", sheet_name="Sheet1")
|
||||||
|
for row in range(df.shape[0]):
|
||||||
|
product = Product.objects.get_or_create(id=df.iat[row, 0])
|
||||||
|
product.name = df.iat[row, 1]
|
||||||
|
product.name = Category.objects.get_or_create(name=df.iat[row, 2])
|
||||||
|
for cat in df.iat[row, 4]:
|
||||||
|
pass
|
||||||
|
|
|
@ -2,7 +2,7 @@ djangorestframework==3.14.0
|
||||||
Django==4.0.8
|
Django==4.0.8
|
||||||
django-cors-headers==3.13.0
|
django-cors-headers==3.13.0
|
||||||
django-environ==0.9.0
|
django-environ==0.9.0
|
||||||
"drf-yasg[validation]"
|
drf-yasg[validation]
|
||||||
typing-extensions
|
typing-extensions
|
||||||
Pillow==9.2.0
|
Pillow==9.2.0
|
||||||
|
|
||||||
|
|
9
requirements/local.txt
Normal file
9
requirements/local.txt
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
-r base.txt
|
||||||
|
|
||||||
|
pylint
|
||||||
|
mypy
|
||||||
|
ipython
|
||||||
|
|
||||||
|
# for exel loading
|
||||||
|
pandas
|
||||||
|
openpyxl
|
Loading…
Reference in New Issue
Block a user