I am trying a timesheet project. I am using Django rest-framework and using Postgres as my database. My client requested me this (If a user already existed in the database or a new user is creating their account an email should be triggered when the post option was submitted in rest API).
models.py
from django.http import HttpResponse, HttpResponseRedirect, response
from django.db import models
from django.db.models.deletion import CASCADE
from django.utils import timezone
from django.dispatch import receiver
from django.db.models.signals import post_save
from django.conf import settings
from django.core.mail import send_mail
from django.db.models import signals
import datetime
from django.core.mail import EmailMessage
class User(models.Model):
CHOICES= (
('manager','Manager'),
('hr', 'HR'),
('hr manager','HR Manager'),
('trainee','Trainee')
)
firstname = models.CharField(max_length=210)
lastname = models.CharField(max_length=210)
dob=models.DateField(max_length=8)
email=models.EmailField(max_length=254,default=None)
password=models.CharField(max_length=100,default=None)
joiningDate=models.DateTimeField(max_length=8)
userrole=models.CharField(max_length=20,choices=CHOICES,null=True)
def __str__(self):
return self.firstname
class Project(models.Model):
name = models.CharField(max_length=20)
description=models.TextField()
type=models.TextField()
startDate = models.DateTimeField(max_length=10)
endDate=models.DateTimeField(max_length=10)
user=models.ManyToManyField(User)
def __str__(self):
return self.name
class Timesheet(models.Model):
project=models.ManyToManyField(Project)
Submitted_by=models.ForeignKey(default=None,related_name="SubmittedBy",to='User',on_delete=models.CASCADE)
status=models.CharField(max_length=200)
ApprovedBy=models.ForeignKey(default=None,related_name="ApprovedBy",to='User',on_delete=models.CASCADE)
Date=models.DateField()
Hours=models.TimeField(null=True)
def __str__(self):
return self.id
class Client(models.Model):
clientname=models.CharField(max_length=20)
comapny=models.CharField(max_length=200)
location=models.CharField(max_length=200)
email=models.EmailField(max_length=25,default=None)
def __str__(self):
return self.clientname
serializers.py
from django.db.models import fields
from rest_framework import serializers
from.models import User,Project,Timesheet,Client
class UserSerializers(serializers.ModelSerializer):
class Meta:
model= User
fields ='__all__'
password = serializers.CharField(max_length=128, write_only=True, required=True)
class ProjectSerializers(serializers.ModelSerializer):
class Meta:
model= Project
fields= '__all__'
class TimesheetSerializers(serializers.ModelSerializer):
class Meta:
model= Timesheet
fields= '__all__'
class ClientSerializers(serializers.ModelSerializer):
class Meta:
model=Client
fields= '__all__'
viewset.py
from rest_framework import viewsets
from rest_framework import permissions
from.import models
from.import serializers
class UserViewset(viewsets.ModelViewSet):
permission_classes=(permissions.IsAuthenticated,)
queryset=models.User.objects.all()
serializer_class=serializers.UserSerializers
class ProjectViewSet(viewsets.ModelViewSet):
permission_classes=(permissions.IsAuthenticated,)
queryset=models.Project.objects.all()
serializer_class=serializers.ProjectSerializers
class TimesheetViewset(viewsets.ModelViewSet):
permission_classes=(permissions.IsAuthenticated,)
queryset=models.Timesheet.objects.all()
serializer_class=serializers.TimesheetSerializers
class ClientViewSet(viewsets.ModelViewSet):
permission_classes=(permissions.IsAuthenticated,)
queryset=models.Client.objects.all()
serializer_class=serializers.ClientSerializers
router.py
from App.viewsets import ClientViewSet, UserViewset,ProjectViewSet,TimesheetViewset
from rest_framework import routers
router = routers.DefaultRouter()
router.register('User',UserViewset)
router.register('Project',ProjectViewSet)
router.register('Timesheet',TimesheetViewset)
router.register('Client',ClientViewSet)
I am new to Django.