added data

This commit is contained in:
2025-08-04 11:01:18 +03:30
parent 953dbe5a08
commit 812d507f26
6 changed files with 62 additions and 14 deletions

View File

@@ -70,7 +70,7 @@ class Job(models.Model):
type = models.CharField(max_length=15, choices=TYPE_CHOICES, default="Irrigating") type = models.CharField(max_length=15, choices=TYPE_CHOICES, default="Irrigating")
field = models.ForeignKey(Field, on_delete=models.CASCADE) field = models.ForeignKey(Field, on_delete=models.CASCADE)
made_date = models.DateTimeField(auto_now_add=True) made_date = models.DateTimeField(auto_now_add=True)
due_date = models.DateTimeField() due_date = models.DateTimeField(auto_now_add=True)
status = models.BooleanField() status = models.BooleanField()
costs = models.ForeignKey(Cost, on_delete=models.SET_NULL, null=True, blank=True) costs = models.ForeignKey(Cost, on_delete=models.SET_NULL, null=True, blank=True)
notes = models.ForeignKey(Note, on_delete=models.SET_NULL, null=True, blank=True) notes = models.ForeignKey(Note, on_delete=models.SET_NULL, null=True, blank=True)

View File

@@ -1,6 +1,8 @@
from rest_framework import serializers from rest_framework import serializers
from .models import Field, Note, Cost, Image, Job, Cultivation_calender, Product from .models import Field, Note, Cost, Image, Job, Cultivation_calender, Product
from jalali_date import datetime2jalali
class FieldSerializer(serializers.ModelSerializer): class FieldSerializer(serializers.ModelSerializer):
class Meta: class Meta:
@@ -21,22 +23,31 @@ class CostSerializer(serializers.ModelSerializer):
class ImageSerializer(serializers.ModelSerializer): class ImageSerializer(serializers.ModelSerializer):
uploaded_at = serializers.SerializerMethodField()
class Meta: class Meta:
model = Image model = Image
fields = "__all__" fields = "__all__"
def get_uploaded_at(self, obj):
return datetime2jalali(obj.uploaded_at).strftime("%Y/%m/%d %H:%M:%S")
class JobSerializer(serializers.ModelSerializer): class JobSerializer(serializers.ModelSerializer):
field = serializers.PrimaryKeyRelatedField(queryset=Field.objects.all()) # field = serializers.PrimaryKeyRelatedField(queryset=Field.objects.all())
costs = serializers.PrimaryKeyRelatedField( field = FieldSerializer(read_only=True)
queryset=Cost.objects.all(), required=False, allow_null=True # costs = serializers.PrimaryKeyRelatedField(
) # queryset=Cost.objects.all(), required=False, allow_null=True
notes = serializers.PrimaryKeyRelatedField( # )
queryset=Note.objects.all(), required=False, allow_null=True costs = CostSerializer(read_only=True, allow_null=True)
) # notes = serializers.PrimaryKeyRelatedField(
images = serializers.PrimaryKeyRelatedField( # queryset=Note.objects.all(), required=False, allow_null=True
queryset=Image.objects.all(), required=False, allow_null=True # )
) notes = NoteSerializer(read_only=True, allow_null=True)
# images = serializers.PrimaryKeyRelatedField(
# queryset=Image.objects.all(), required=False, allow_null=True
# )
images = ImageSerializer(read_only=True, allow_null=True)
class Meta: class Meta:
model = Job model = Job

View File

@@ -10,6 +10,9 @@ from .views import (
CostDetail, CostDetail,
FieldListCreate, FieldListCreate,
FieldDetail, FieldDetail,
cultivation_calender,
ProductListCreate,
ProductDetail,
) )
@@ -20,13 +23,15 @@ def register_crud_urls(prefix, list_view, detail_view):
] ]
urlpatterns = [] urlpatterns = [
path("cultivation/", cultivation_calender.as_view(), name="cultivation_calender"),
]
urlpatterns += register_crud_urls("jobs", JobListCreate, JobDetail) urlpatterns += register_crud_urls("jobs", JobListCreate, JobDetail)
urlpatterns += register_crud_urls("notes", NoteListCreate, NoteDetails) urlpatterns += register_crud_urls("notes", NoteListCreate, NoteDetails)
urlpatterns += register_crud_urls("images", ImageListCreate, ImageDetail) urlpatterns += register_crud_urls("images", ImageListCreate, ImageDetail)
urlpatterns += register_crud_urls("costs", CostListCreate, CostDetail) urlpatterns += register_crud_urls("costs", CostListCreate, CostDetail)
urlpatterns += register_crud_urls("fields", FieldListCreate, FieldDetail) urlpatterns += register_crud_urls("fields", FieldListCreate, FieldDetail)
urlpatterns += register_crud_urls("products", ProductListCreate, ProductDetail)
# urlpatterns = [ # urlpatterns = [

View File

@@ -3,13 +3,15 @@ from rest_framework import status, generics
from rest_framework.views import APIView from rest_framework.views import APIView
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
from .models import Job, Note, Image, Cost, Field from .models import Job, Note, Image, Cost, Field, Cultivation_calender, Product
from .serializers import ( from .serializers import (
JobSerializer, JobSerializer,
NoteSerializer, NoteSerializer,
ImageSerializer, ImageSerializer,
CostSerializer, CostSerializer,
FieldSerializer, FieldSerializer,
CultivationCalenderSerializer,
ProductSerializer,
) )
from rest_framework.viewsets import ModelViewSet from rest_framework.viewsets import ModelViewSet
@@ -98,6 +100,33 @@ class NoteDetails(generics.RetrieveUpdateDestroyAPIView):
return Note.objects.filter(user=self.request.user) return Note.objects.filter(user=self.request.user)
class cultivation_calender(generics.ListCreateAPIView):
serializer_class = CultivationCalenderSerializer
premission_classes = [IsAuthenticated]
def get_queryset(self):
return Cultivation_calender.objects.all()
def perform_create(self, serializer):
serializer.save()
class ProductListCreate(generics.ListCreateAPIView):
serializer_class = ProductSerializer
permission_classes = [IsAuthenticated]
def get_queryset(self):
return Product.objects.all()
class ProductDetail(generics.RetrieveUpdateDestroyAPIView):
serializer_class = ProductSerializer
permission_classes = [IsAuthenticated]
def get_queryset(self):
return Product.objects.filter()
class JobListCreate(generics.ListCreateAPIView): class JobListCreate(generics.ListCreateAPIView):
serializer_class = JobSerializer serializer_class = JobSerializer
permission_classes = [IsAuthenticated] permission_classes = [IsAuthenticated]

BIN
images/218027982.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 KiB

View File

@@ -43,6 +43,7 @@ INSTALLED_APPS = [
"django.contrib.sessions", "django.contrib.sessions",
"django.contrib.messages", "django.contrib.messages",
"django.contrib.staticfiles", "django.contrib.staticfiles",
"corsheaders",
"rest_framework", "rest_framework",
"rest_framework_simplejwt", "rest_framework_simplejwt",
"field", "field",
@@ -51,6 +52,7 @@ INSTALLED_APPS = [
MIDDLEWARE = [ MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware", "django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware", "django.contrib.sessions.middleware.SessionMiddleware",
"corsheaders.middleware.CorsMiddleware",
"django.middleware.common.CommonMiddleware", "django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware", "django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware",
@@ -58,6 +60,7 @@ MIDDLEWARE = [
"django.middleware.clickjacking.XFrameOptionsMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware",
] ]
CORS_ALLOW_ALL_ORIGINS = True
ROOT_URLCONF = "settings.urls" ROOT_URLCONF = "settings.urls"
TEMPLATES = [ TEMPLATES = [