dodanie nowych pól, dostosowanie do pol w front
All checks were successful
continuous-integration/drone Build is passing

This commit is contained in:
Jakub K 2023-12-18 19:01:08 +01:00
parent 78d0a3c55f
commit 25946fbbd1
3 changed files with 48 additions and 55 deletions

View File

@ -9,7 +9,6 @@ class JobListing(models.Model):
('C', 'Zakończona'), ('C', 'Zakończona'),
('W', 'Oczekująca na sprawdzenie'), ('W', 'Oczekująca na sprawdzenie'),
('R', 'Zarchiwizowana'), ('R', 'Zarchiwizowana'),
('','')
] ]
paid_status = [ paid_status = [
('P', 'Oplacona'), ('P', 'Oplacona'),
@ -19,42 +18,42 @@ class JobListing(models.Model):
company_name = models.CharField(max_length=255) company_name = models.CharField(max_length=255)
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
content = models.TextField() content = models.TextField()
min_salary = models.DecimalField(max_digits=10, decimal_places=2) minsalary = models.IntegerField()
max_salary = models.DecimalField(max_digits=10, decimal_places=2) maxsalary = models.IntegerField()
location = models.CharField(max_length=255) requiresalary = models.BooleanField()
coordinates = models.CharField(max_length=255) # rozwaz GEODJANGO webpage = models.CharField(max_length=255)
created_by = models.ForeignKey(MyUser, on_delete=models.CASCADE, related_name='job_listings') localization = models.CharField(max_length=255)
vat_number = models.CharField(max_length=10)
created_at = models.DateTimeField(default=timezone.now) created_at = models.DateTimeField(default=timezone.now)
status = models.CharField(max_length=1, choices=status_choices, default='A') status = models.CharField(max_length=1, choices=status_choices, default='W')
status_paid = models.CharField(max_length=1, choices=paid_status, default='N') status_paid = models.CharField(max_length=1, choices=paid_status, default='N')
category = models.CharField(max_length=255, null=True, blank=True) # category = models.CharField(max_length=255, null=True, blank=True)
expiration_date = models.DateField(null=True, blank=True) expiration_date = models.DateField(null=True, blank=True)
company_description = models.TextField(null=True, blank=True)
# company_logo = models.ImageField(upload_to='company_logos/', null=True, blank=True) # company_logo = models.ImageField(upload_to='company_logos/', null=True, blank=True)
experience_level = models.CharField(max_length=255, null=True, blank=True) experience_level = models.CharField(max_length=255, null=True, blank=True)
contract_type = models.CharField(max_length=255, null=True, blank=True) employmentType = models.CharField(max_length=255, null=True, blank=True)
is_remote = models.BooleanField(default=False) workFromHome = models.CharField(max_length=255)
updated_at = models.DateTimeField(auto_now=True) updated_at = models.DateTimeField(auto_now=True)
job_skills = models.ManyToManyField(SkillLevels, on_delete=models.CASCADE)
created_by = models.ForeignKey(MyUser, on_delete=models.CASCADE)
first_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
contact_email = models.EmailField(max_length=255, null=True, blank=True)
def __str__(self): def __str__(self):
return f"{self.name} at {self.company_name}" return f"{self.name} at {self.company_name}"
class Skill(models.Model): class SkillLevels(models.Model):
name = models.CharField(max_length=255)
proficiency_choices = [ proficiency_choices = [
('N', 'Nice to have'),
('B', 'Podstawowy'), ('B', 'Podstawowy'),
('M', 'Średnio zaawansowany'),
('A', 'Zaawansowany'), ('A', 'Zaawansowany'),
('E', 'Ekspert'), ('E', 'Ekspert'),
] ]
proficiency = models.CharField(max_length=1, choices=proficiency_choices)
def __str__(self): jobPostingId = models.ForeignKey(JobListing, on_delete=models.CASCADE)
return self.name skill_name =models.CharField(max_length=255)
skill_level = models.CharField(max_length=1, choices=proficiency_choices,)
class JobSkill(models.Model):
job_listing = models.ForeignKey(JobListing, on_delete=models.CASCADE, related_name='job_skills')
skill = models.ForeignKey(Skill, on_delete=models.CASCADE, related_name='job_skills')
proficiency = models.CharField(max_length=255)
def __str__(self):
return f"{self.skill.name} for {self.job_listing.name} ({self.proficiency})"

View File

@ -1,5 +1,5 @@
from rest_framework import serializers from rest_framework import serializers
from jobposting.models import JobListing, Skill, JobSkill from jobposting.models import JobListing, SkillLevels
from core.models import MyUser from core.models import MyUser
class MyUserSerializer(serializers.ModelSerializer): class MyUserSerializer(serializers.ModelSerializer):
@ -7,27 +7,20 @@ class MyUserSerializer(serializers.ModelSerializer):
model = MyUser model = MyUser
fields = ['id', 'email', 'first_name', 'last_name'] fields = ['id', 'email', 'first_name', 'last_name']
class SkillSerializer(serializers.ModelSerializer): class SkillLevelsSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Skill model = SkillLevels
fields = ['id', 'name', 'proficiency'] fields = ['id', 'jobPostingId', 'skill_name', 'skill_level']
class JobSkillSerializer(serializers.ModelSerializer):
skill = SkillSerializer(read_only=True)
class Meta:
model = JobSkill
fields = ['id', 'job_listing', 'skill', 'proficiency']
class JobListingSerializer(serializers.ModelSerializer): class JobListingSerializer(serializers.ModelSerializer):
created_by = MyUserSerializer(read_only=True) created_by = MyUserSerializer(read_only=True)
job_skills = JobSkillSerializer(many=True, read_only=True) job_skills = SkillLevelsSerializer(many=True, read_only=True)
class Meta: class Meta:
model = JobListing model = JobListing
fields = [ fields = [
'id', 'company_name', 'name', 'content', 'min_salary', 'max_salary', 'id', 'company_name', 'name', 'content', 'minsalary', 'maxsalary',
'location', 'coordinates', 'created_by', 'created_at', 'status', 'localization', 'created_by', 'created_at', 'status', 'status_paid',
'status_paid', 'category', 'expiration_date', 'company_description', 'expiration_date', 'experience_level', 'employmentType', 'is_remote',
'experience_level', 'contract_type', 'is_remote', 'updated_at', 'job_skills' 'updated_at', 'job_skills', 'contact_email', 'first_name', 'last_name',
] ]

View File

@ -1,10 +1,9 @@
from rest_framework import viewsets, permissions from rest_framework import viewsets, permissions
from jobposting.models import JobListing, Skill, JobSkill from jobposting.models import JobListing, SkillLevels
from jobposting.serializers import ( from jobposting.serializers import (
JobListingSerializer, JobListingSerializer,
SkillSerializer, SkillLevelSerializer,
JobSkillSerializer,
MyUserSerializer, MyUserSerializer,
) )
from core.models import MyUser from core.models import MyUser
@ -22,18 +21,20 @@ class JobListingViewSet(viewsets.ModelViewSet):
# permission_classes = [permissions.IsAuthenticatedOrReadOnly] # permission_classes = [permissions.IsAuthenticatedOrReadOnly]
def perform_create(self, serializer): def perform_create(self, serializer):
if self.request.user.is_authenticated:
serializer.save(created_by=self.request.user) serializer.save(created_by=self.request.user)
else:
first_name = self.request.data.get('first_name')
last_name = self.request.data.get('last_name')
contact_email = self.request.data.get('contact_email')
serializer.save(contact_email=contact_email,
last_name=last_name,
first_name=first_name)
class SkillViewSet(viewsets.ModelViewSet): class SkillLevelsViewSet(viewsets.ModelViewSet):
permission_classes = [permissions.AllowAny] # test only permission_classes = [permissions.AllowAny] # test only
queryset = Skill.objects.all() queryset = SkillLevels.objects.all()
serializer_class = SkillSerializer serializer_class = SkillLevelSerializer
# permission_classes = [permissions.IsAuthenticatedOrReadOnly]
class JobSkillViewSet(viewsets.ModelViewSet):
permission_classes = [permissions.AllowAny] # test only
queryset = JobSkill.objects.all()
serializer_class = JobSkillSerializer
# permission_classes = [permissions.IsAuthenticatedOrReadOnly] # permission_classes = [permissions.IsAuthenticatedOrReadOnly]
# Możesz także chcieć dodać widoki szczegółowe lub niestandardowe akcje. # Możesz także chcieć dodać widoki szczegółowe lub niestandardowe akcje.