diff --git a/field/models.py b/field/models.py index b6cbf05..a4e331f 100644 --- a/field/models.py +++ b/field/models.py @@ -70,7 +70,7 @@ class Job(models.Model): type = models.CharField(max_length=15, choices=TYPE_CHOICES, default="Irrigating") field = models.ForeignKey(Field, on_delete=models.CASCADE) made_date = models.DateTimeField(auto_now_add=True) - due_date = models.DateTimeField() + due_date = models.DateTimeField(auto_now_add=True) status = models.BooleanField() 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) diff --git a/field/serializers.py b/field/serializers.py index 7e91586..4670574 100644 --- a/field/serializers.py +++ b/field/serializers.py @@ -1,6 +1,8 @@ from rest_framework import serializers from .models import Field, Note, Cost, Image, Job, Cultivation_calender, Product +from jalali_date import datetime2jalali + class FieldSerializer(serializers.ModelSerializer): class Meta: @@ -21,22 +23,31 @@ class CostSerializer(serializers.ModelSerializer): class ImageSerializer(serializers.ModelSerializer): + uploaded_at = serializers.SerializerMethodField() + class Meta: model = Image fields = "__all__" + def get_uploaded_at(self, obj): + return datetime2jalali(obj.uploaded_at).strftime("%Y/%m/%d %H:%M:%S") + class JobSerializer(serializers.ModelSerializer): - field = serializers.PrimaryKeyRelatedField(queryset=Field.objects.all()) - costs = serializers.PrimaryKeyRelatedField( - queryset=Cost.objects.all(), required=False, allow_null=True - ) - notes = serializers.PrimaryKeyRelatedField( - queryset=Note.objects.all(), required=False, allow_null=True - ) - images = serializers.PrimaryKeyRelatedField( - queryset=Image.objects.all(), required=False, allow_null=True - ) + # field = serializers.PrimaryKeyRelatedField(queryset=Field.objects.all()) + field = FieldSerializer(read_only=True) + # costs = serializers.PrimaryKeyRelatedField( + # queryset=Cost.objects.all(), required=False, allow_null=True + # ) + costs = CostSerializer(read_only=True, allow_null=True) + # notes = serializers.PrimaryKeyRelatedField( + # queryset=Note.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: model = Job diff --git a/field/urls.py b/field/urls.py index f27a27f..1dca493 100644 --- a/field/urls.py +++ b/field/urls.py @@ -10,6 +10,9 @@ from .views import ( CostDetail, FieldListCreate, 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("notes", NoteListCreate, NoteDetails) urlpatterns += register_crud_urls("images", ImageListCreate, ImageDetail) urlpatterns += register_crud_urls("costs", CostListCreate, CostDetail) urlpatterns += register_crud_urls("fields", FieldListCreate, FieldDetail) +urlpatterns += register_crud_urls("products", ProductListCreate, ProductDetail) # urlpatterns = [ diff --git a/field/views.py b/field/views.py index 5a8e947..65d1dc6 100644 --- a/field/views.py +++ b/field/views.py @@ -3,13 +3,15 @@ from rest_framework import status, generics from rest_framework.views import APIView from rest_framework.response import Response 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 ( JobSerializer, NoteSerializer, ImageSerializer, CostSerializer, FieldSerializer, + CultivationCalenderSerializer, + ProductSerializer, ) from rest_framework.viewsets import ModelViewSet @@ -98,6 +100,33 @@ class NoteDetails(generics.RetrieveUpdateDestroyAPIView): 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): serializer_class = JobSerializer permission_classes = [IsAuthenticated] diff --git a/images/218027982.jpg b/images/218027982.jpg new file mode 100644 index 0000000..1353078 Binary files /dev/null and b/images/218027982.jpg differ diff --git a/settings/settings.py b/settings/settings.py index f4f979c..ca871d1 100644 --- a/settings/settings.py +++ b/settings/settings.py @@ -43,6 +43,7 @@ INSTALLED_APPS = [ "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", + "corsheaders", "rest_framework", "rest_framework_simplejwt", "field", @@ -51,6 +52,7 @@ INSTALLED_APPS = [ MIDDLEWARE = [ "django.middleware.security.SecurityMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", + "corsheaders.middleware.CorsMiddleware", "django.middleware.common.CommonMiddleware", "django.middleware.csrf.CsrfViewMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", @@ -58,6 +60,7 @@ MIDDLEWARE = [ "django.middleware.clickjacking.XFrameOptionsMiddleware", ] +CORS_ALLOW_ALL_ORIGINS = True ROOT_URLCONF = "settings.urls" TEMPLATES = [