first commit
This commit is contained in:
commit
3e4574dcdd
163 files changed
+3559
No files matched your search
Whitespace-only changes.
@@ -0,0 +1,14 @@
|
||||
from django.contrib import admin
|
||||
from .models import Product as ProductModel, ProductCategory as ProductCategoryModel
|
||||
# Register your models here.
|
||||
|
||||
|
||||
@admin.register(ProductCategoryModel)
|
||||
class ProductCategoryAdmin(admin.ModelAdmin):
|
||||
list_filter = ['name', 'is_enable']
|
||||
|
||||
|
||||
@admin.register(ProductModel)
|
||||
class ProductAdmin(admin.ModelAdmin):
|
||||
list_filter = ['category__name', 'is_enable']
|
||||
search_fields = ['name',]
|
||||
@@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class ProductConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'apps.product'
|
||||
@@ -0,0 +1,38 @@
|
||||
# Generated by Django 4.2.1 on 2024-03-27 13:12
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='ProductCategory',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=50)),
|
||||
('image', models.ImageField(blank=True, null=True, upload_to='product_category/')),
|
||||
('is_enable', models.BooleanField(default=True)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Product',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=50)),
|
||||
('price', models.PositiveIntegerField()),
|
||||
('emtiyaz', models.PositiveIntegerField()),
|
||||
('desc', models.TextField(blank=True, null=True)),
|
||||
('image', models.ImageField(blank=True, null=True, upload_to='product/')),
|
||||
('is_enable', models.BooleanField(default=True)),
|
||||
('quantity', models.PositiveIntegerField(blank=True, null=True)),
|
||||
('category', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='product_category', to='product.productcategory')),
|
||||
],
|
||||
),
|
||||
]
|
||||
Whitespace-only changes.
@@ -0,0 +1,32 @@
|
||||
from django.db import models
|
||||
from apps.emtiyazat.models import ArzeshEmtiyaz as ArzeshEmtiyazModel
|
||||
# Create your models here.
|
||||
|
||||
|
||||
class ProductCategory(models.Model):
|
||||
name = models.CharField(max_length=50, null=False, blank=False)
|
||||
image = models.ImageField(upload_to='product_category/', null=True, blank=True)
|
||||
is_enable = models.BooleanField(default=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class Product(models.Model):
|
||||
category = models.ForeignKey(ProductCategory, on_delete=models.CASCADE, related_name='product_category')
|
||||
name = models.CharField(max_length=50, null=False, blank=False)
|
||||
price = models.PositiveIntegerField(null=False, blank=False)
|
||||
emtiyaz = models.PositiveIntegerField(null=False, blank=False)
|
||||
desc = models.TextField(null=True, blank=True)
|
||||
image = models.ImageField(upload_to='product/', null=True, blank=True)
|
||||
is_enable = models.BooleanField(default=True)
|
||||
quantity = models.PositiveIntegerField(null=True, blank=True)
|
||||
|
||||
@property
|
||||
def get_emtiyaz(self):
|
||||
arzesh_obj = ArzeshEmtiyazModel.objects.filter().last()
|
||||
return self.price / arzesh_obj.price
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
from apps.product.models import Product as ProductModel
|
||||
|
||||
|
||||
def get_all_products() -> ProductModel:
|
||||
return ProductModel.objects.filter(is_enable=True, category__is_enable=True)
|
||||
Whitespace-only changes.
@@ -0,0 +1,7 @@
|
||||
from django.urls import path, include
|
||||
from apps.product.views import *
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
path('list/', ProductList.as_view(), name='product-list'),
|
||||
]
|
||||
@@ -0,0 +1,31 @@
|
||||
from django.shortcuts import render
|
||||
from rest_framework.views import APIView
|
||||
from apps.product.selector import get_all_products
|
||||
from rest_framework import serializers
|
||||
from rest_framework.response import Response
|
||||
from rest_framework import status
|
||||
from utils.tools.inline_serializer import inline_serializer
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
# Create your views here.
|
||||
|
||||
|
||||
class ProductList(APIView):
|
||||
|
||||
permission_classes = (IsAuthenticated, )
|
||||
|
||||
class OutputSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField()
|
||||
category = inline_serializer(many=False, fields={
|
||||
'name': serializers.CharField(),
|
||||
})
|
||||
name = serializers.CharField()
|
||||
desc = serializers.CharField()
|
||||
emtiyaz = serializers.IntegerField()
|
||||
get_emtiyaz = serializers.IntegerField()
|
||||
image = serializers.ImageField()
|
||||
|
||||
def get(self, request):
|
||||
products = get_all_products()
|
||||
output = self.OutputSerializer(products, many=True)
|
||||
|
||||
return Response(data=output.data, status=status.HTTP_200_OK)
|
||||
Reference in new issue
Block a user