From 25946fbbd1130e36281adc886c61d0e79da31370 Mon Sep 17 00:00:00 2001 From: Jakub K Date: Mon, 18 Dec 2023 19:01:08 +0100 Subject: [PATCH] =?UTF-8?q?dodanie=20nowych=20p=C3=B3l,=20dostosowanie=20d?= =?UTF-8?q?o=20pol=20w=20front?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jobposting/models.py | 49 +++++++++++++++++++-------------------- jobposting/serializers.py | 25 +++++++------------- jobposting/views.py | 29 ++++++++++++----------- 3 files changed, 48 insertions(+), 55 deletions(-) diff --git a/jobposting/models.py b/jobposting/models.py index 1c6b817..9904969 100644 --- a/jobposting/models.py +++ b/jobposting/models.py @@ -9,7 +9,6 @@ class JobListing(models.Model): ('C', 'Zakończona'), ('W', 'Oczekująca na sprawdzenie'), ('R', 'Zarchiwizowana'), - ('','') ] paid_status = [ ('P', 'Oplacona'), @@ -19,42 +18,42 @@ class JobListing(models.Model): company_name = models.CharField(max_length=255) name = models.CharField(max_length=255) content = models.TextField() - min_salary = models.DecimalField(max_digits=10, decimal_places=2) - max_salary = models.DecimalField(max_digits=10, decimal_places=2) - location = models.CharField(max_length=255) - coordinates = models.CharField(max_length=255) # rozwaz GEODJANGO - created_by = models.ForeignKey(MyUser, on_delete=models.CASCADE, related_name='job_listings') + minsalary = models.IntegerField() + maxsalary = models.IntegerField() + requiresalary = models.BooleanField() + webpage = models.CharField(max_length=255) + localization = models.CharField(max_length=255) + vat_number = models.CharField(max_length=10) 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') - 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) - company_description = models.TextField(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) - contract_type = models.CharField(max_length=255, null=True, blank=True) - is_remote = models.BooleanField(default=False) + employmentType = models.CharField(max_length=255, null=True, blank=True) + workFromHome = models.CharField(max_length=255) 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): return f"{self.name} at {self.company_name}" -class Skill(models.Model): - name = models.CharField(max_length=255) +class SkillLevels(models.Model): + proficiency_choices = [ + ('N', 'Nice to have'), ('B', 'Podstawowy'), + ('M', 'Średnio zaawansowany'), ('A', 'Zaawansowany'), ('E', 'Ekspert'), ] - proficiency = models.CharField(max_length=1, choices=proficiency_choices) - - def __str__(self): - return self.name -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})" + jobPostingId = models.ForeignKey(JobListing, on_delete=models.CASCADE) + skill_name =models.CharField(max_length=255) + skill_level = models.CharField(max_length=1, choices=proficiency_choices,) diff --git a/jobposting/serializers.py b/jobposting/serializers.py index e8234aa..7fff612 100644 --- a/jobposting/serializers.py +++ b/jobposting/serializers.py @@ -1,5 +1,5 @@ from rest_framework import serializers -from jobposting.models import JobListing, Skill, JobSkill +from jobposting.models import JobListing, SkillLevels from core.models import MyUser class MyUserSerializer(serializers.ModelSerializer): @@ -7,27 +7,20 @@ class MyUserSerializer(serializers.ModelSerializer): model = MyUser fields = ['id', 'email', 'first_name', 'last_name'] -class SkillSerializer(serializers.ModelSerializer): +class SkillLevelsSerializer(serializers.ModelSerializer): class Meta: - model = Skill - fields = ['id', 'name', 'proficiency'] - -class JobSkillSerializer(serializers.ModelSerializer): - skill = SkillSerializer(read_only=True) - - class Meta: - model = JobSkill - fields = ['id', 'job_listing', 'skill', 'proficiency'] + model = SkillLevels + fields = ['id', 'jobPostingId', 'skill_name', 'skill_level'] class JobListingSerializer(serializers.ModelSerializer): created_by = MyUserSerializer(read_only=True) - job_skills = JobSkillSerializer(many=True, read_only=True) + job_skills = SkillLevelsSerializer(many=True, read_only=True) class Meta: model = JobListing fields = [ - 'id', 'company_name', 'name', 'content', 'min_salary', 'max_salary', - 'location', 'coordinates', 'created_by', 'created_at', 'status', - 'status_paid', 'category', 'expiration_date', 'company_description', - 'experience_level', 'contract_type', 'is_remote', 'updated_at', 'job_skills' + 'id', 'company_name', 'name', 'content', 'minsalary', 'maxsalary', + 'localization', 'created_by', 'created_at', 'status', 'status_paid', + 'expiration_date', 'experience_level', 'employmentType', 'is_remote', + 'updated_at', 'job_skills', 'contact_email', 'first_name', 'last_name', ] diff --git a/jobposting/views.py b/jobposting/views.py index 17416e1..d369334 100644 --- a/jobposting/views.py +++ b/jobposting/views.py @@ -1,10 +1,9 @@ from rest_framework import viewsets, permissions -from jobposting.models import JobListing, Skill, JobSkill +from jobposting.models import JobListing, SkillLevels from jobposting.serializers import ( JobListingSerializer, - SkillSerializer, - JobSkillSerializer, + SkillLevelSerializer, MyUserSerializer, ) from core.models import MyUser @@ -20,20 +19,22 @@ class JobListingViewSet(viewsets.ModelViewSet): queryset = JobListing.objects.all() serializer_class = JobListingSerializer # permission_classes = [permissions.IsAuthenticatedOrReadOnly] - + def perform_create(self, serializer): - serializer.save(created_by=self.request.user) + if self.request.user.is_authenticated: + 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 - queryset = Skill.objects.all() - serializer_class = SkillSerializer - # permission_classes = [permissions.IsAuthenticatedOrReadOnly] - -class JobSkillViewSet(viewsets.ModelViewSet): - permission_classes = [permissions.AllowAny] # test only - queryset = JobSkill.objects.all() - serializer_class = JobSkillSerializer + queryset = SkillLevels.objects.all() + serializer_class = SkillLevelSerializer # permission_classes = [permissions.IsAuthenticatedOrReadOnly] # Możesz także chcieć dodać widoki szczegółowe lub niestandardowe akcje.