From cdedc068a315f84d27bcda7366cad5bc670bec9d Mon Sep 17 00:00:00 2001 From: Zamil Majdy <z.majdy1996@gmail.com> Date: Tue, 28 Mar 2017 20:00:37 +0700 Subject: [PATCH] [#140654507] #11 Update database schema --- core/migrations/0005_auto_20170328_1904.py | 43 ++++++++++++++++++++++ core/migrations/0006_auto_20170328_1950.py | 19 ++++++++++ core/models/__init__.py | 2 + core/models/accounts.py | 3 +- core/models/vacancies.py | 13 ++++++- core/serializers/vacancies.py | 13 ++++++- core/views/vacancies.py | 16 ++++---- 7 files changed, 99 insertions(+), 10 deletions(-) create mode 100644 core/migrations/0005_auto_20170328_1904.py create mode 100644 core/migrations/0006_auto_20170328_1950.py diff --git a/core/migrations/0005_auto_20170328_1904.py b/core/migrations/0005_auto_20170328_1904.py new file mode 100644 index 00000000..bde81294 --- /dev/null +++ b/core/migrations/0005_auto_20170328_1904.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.5 on 2017-03-28 12:04 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0004_auto_20170328_1417'), + ] + + operations = [ + migrations.CreateModel( + name='Application', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('cover_letter', models.TextField(blank=True, null=True)), + ('allow_transcript', models.BooleanField(default=True)), + ], + ), + migrations.RemoveField( + model_name='student', + name='applied_vacancies', + ), + migrations.AddField( + model_name='student', + name='applied_vacancies', + field=models.ManyToManyField(blank=True, related_name='applied_vacancies', through='core.Application', to='core.Vacancy'), + ), + migrations.AddField( + model_name='application', + name='student', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Student'), + ), + migrations.AddField( + model_name='application', + name='vacancy', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.Vacancy'), + ), + ] diff --git a/core/migrations/0006_auto_20170328_1950.py b/core/migrations/0006_auto_20170328_1950.py new file mode 100644 index 00000000..85ba09d0 --- /dev/null +++ b/core/migrations/0006_auto_20170328_1950.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.5 on 2017-03-28 12:50 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0005_auto_20170328_1904'), + ] + + operations = [ + migrations.AlterUniqueTogether( + name='application', + unique_together=set([('student', 'vacancy')]), + ), + ] diff --git a/core/models/__init__.py b/core/models/__init__.py index a9638e4e..8ca55685 100755 --- a/core/models/__init__.py +++ b/core/models/__init__.py @@ -3,6 +3,8 @@ from core.models.accounts import Company from core.models.accounts import Student from core.models.accounts import Supervisor from core.models.vacancies import Vacancy +from core.models.vacancies import Application + diff --git a/core/models/accounts.py b/core/models/accounts.py index e94c7f04..29685159 100644 --- a/core/models/accounts.py +++ b/core/models/accounts.py @@ -49,7 +49,8 @@ class Student(models.Model): resume = models.FileField(upload_to=get_student_resume_file_path, null=True, blank=True) phone_number = models.CharField(max_length=100, blank=True, db_index=True, null=True) bookmarked_vacancies = models.ManyToManyField('core.Vacancy', related_name="bookmarked_vacancies", blank=True) - applied_vacancies = models.ManyToManyField('core.Vacancy', related_name="applied_vacancies", blank=True) + applied_vacancies = models.ManyToManyField('core.Vacancy', related_name="applied_vacancies", + blank=True, through='core.Application') @property def name(self): diff --git a/core/models/vacancies.py b/core/models/vacancies.py index ef7f7525..f165a2b5 100644 --- a/core/models/vacancies.py +++ b/core/models/vacancies.py @@ -1,6 +1,6 @@ from django.db import models -from core.models.accounts import Company +from core.models.accounts import Company, Student class Vacancy(models.Model): @@ -12,3 +12,14 @@ class Vacancy(models.Model): created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) name = models.CharField(max_length=100, null=False) + + +class Application(models.Model): + cover_letter = models.TextField(null=True, blank=True) + allow_transcript = models.BooleanField(null=False, default=True) + student = models.ForeignKey(Student, on_delete=models.CASCADE) + vacancy = models.ForeignKey(Vacancy, on_delete=models.CASCADE) + + class Meta: + unique_together = (("student", "vacancy"),) + diff --git a/core/serializers/vacancies.py b/core/serializers/vacancies.py index c8a44340..eb1fde43 100644 --- a/core/serializers/vacancies.py +++ b/core/serializers/vacancies.py @@ -1,5 +1,5 @@ from rest_framework import serializers -from core.serializers.accounts import CompanySerializer +from core.serializers.accounts import CompanySerializer, StudentSerializer from core.models.vacancies import Vacancy @@ -11,3 +11,14 @@ class VacancySerializer(serializers.ModelSerializer): fields = '__all__' +class ApplicationSerializer(serializers.ModelSerializer): + vacancy = VacancySerializer() + student = StudentSerializer() + + class Meta: + model = Vacancy + fields = '__all__' + + + + diff --git a/core/views/vacancies.py b/core/views/vacancies.py index 576fa85b..2adf5b9c 100644 --- a/core/views/vacancies.py +++ b/core/views/vacancies.py @@ -5,8 +5,8 @@ from rest_framework.response import Response from core.lib.permissions import IsAdminOrStudent, IsAdminOrCompany from core.models import Student -from core.models.vacancies import Vacancy -from core.serializers.vacancies import VacancySerializer +from core.models.vacancies import Vacancy, Application +from core.serializers.vacancies import VacancySerializer, ApplicationSerializer class VacancyViewSet(viewsets.ModelViewSet): @@ -30,16 +30,18 @@ class ApplicationViewSet(viewsets.GenericViewSet): return Response(vacancies.data) def create(self, request, student_id): - vacancy = get_object_or_404(Vacancy.objects.all(), pk=request.data['vacancy_id']) + cover_letter = request.data.get('cover_letter') + vacancy = get_object_or_404(Vacancy.objects.all(), pk=request.data.get('vacancy_id')) student = get_object_or_404(Student.objects.all(), pk=student_id) - student.applied_vacancies.add(vacancy) - return Response(self.serializer_class(student.applied_vacancies, many=True, context={'request': request}).data) + application = Application(vacancy=vacancy, student=student, cover_letter=cover_letter) + application.save() + return Response(ApplicationSerializer(application, context={'request': request}).data) def destroy(self, request, student_id, pk): vacancy = get_object_or_404(Vacancy.objects.all(), pk=pk) student = get_object_or_404(Student.objects.all(), pk=student_id) - student.applied_vacancies.remove(vacancy) - return Response(self.serializer_class(student.applied_vacancies, many=True, context={'request': request}).data) + application = get_object_or_404(Application.objects.all(), student=student, vacancy=vacancy) + return Response(ApplicationSerializer(application, context={'request': request}).data) class BookmarkedVacancyByStudentViewSet(viewsets.GenericViewSet): -- GitLab