diff --git a/core/admin.py b/core/admin.py index 47c1b6324dfbf857c08bd1b34a607ba6477c2291..f30ded64324bcdff514ec1de0fd65d3ef0ff4e7c 100755 --- a/core/admin.py +++ b/core/admin.py @@ -1,12 +1,11 @@ from django.contrib import admin -from core.models.vacancies import Application, Vacancy from core.models.accounts import Company, Supervisor, Student +from core.models.vacancies import Vacancy admin.site.register(Company) admin.site.register(Student) admin.site.register(Supervisor) admin.site.register(Vacancy) -admin.site.register(Application) diff --git a/core/migrations/0002_auto_20170328_1131.py b/core/migrations/0002_auto_20170328_1131.py new file mode 100644 index 0000000000000000000000000000000000000000..1b2481f47077c50e80f93177f0047f7c2373c8d4 --- /dev/null +++ b/core/migrations/0002_auto_20170328_1131.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.5 on 2017-03-28 04:31 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0001_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='application', + name='student_npm', + ), + migrations.RemoveField( + model_name='application', + name='vacancy_id', + ), + migrations.AddField( + model_name='student', + name='applied_vacancies', + field=models.ManyToManyField(blank=True, related_name='applied_vacancies', to='core.Vacancy'), + ), + migrations.AlterField( + model_name='student', + name='bookmarked_vacancies', + field=models.ManyToManyField(blank=True, related_name='bookmarked_vacancies', to='core.Vacancy'), + ), + migrations.DeleteModel( + name='Application', + ), + ] diff --git a/core/models/__init__.py b/core/models/__init__.py index 8c5ea0e2fce9fb2e961b0a39249174d3a96af59d..a9638e4ef7c2a7639d525d26be476251dd6cf13f 100755 --- a/core/models/__init__.py +++ b/core/models/__init__.py @@ -2,7 +2,6 @@ from core.models.accounts import Company from core.models.accounts import Student from core.models.accounts import Supervisor -from core.models.vacancies import Application from core.models.vacancies import Vacancy diff --git a/core/models/accounts.py b/core/models/accounts.py index 28bda2974eb33281e3f98eb4683a95109b23dd8b..8adf9adb08872e7fbaca29c681556dea24dd0940 100644 --- a/core/models/accounts.py +++ b/core/models/accounts.py @@ -48,7 +48,8 @@ class Student(models.Model): npm = models.IntegerField(validators=[MinValueValidator(100000000), MaxValueValidator(9999999999)], unique=True) 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', blank=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) @property def name(self): diff --git a/core/models/vacancies.py b/core/models/vacancies.py index 23069b78fe641658a551bf7f2c63eefc8b90cf21..eb765886c826fc8bb28f74e446d69d3880dbca78 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, Student +from core.models.accounts import Company class Vacancy(models.Model): @@ -9,8 +9,3 @@ class Vacancy(models.Model): open_time = models.DateTimeField() description = models.TextField(blank=True) close_time = models.DateTimeField() - - -class Application(models.Model): - student_npm = models.OneToOneField(Student) - vacancy_id = models.OneToOneField(Vacancy) \ No newline at end of file diff --git a/core/serializers/vacancies.py b/core/serializers/vacancies.py index d63b740252046e55b06717c94618a1db5e8abe31..c8a443405fa6cb57ae48a2392abea5a597668528 100644 --- a/core/serializers/vacancies.py +++ b/core/serializers/vacancies.py @@ -1,6 +1,6 @@ from rest_framework import serializers from core.serializers.accounts import CompanySerializer -from core.models.vacancies import Vacancy, Application +from core.models.vacancies import Vacancy class VacancySerializer(serializers.ModelSerializer): @@ -11,8 +11,3 @@ class VacancySerializer(serializers.ModelSerializer): fields = '__all__' -class ApplicationSerializer(serializers.ModelSerializer): - class Meta: - model = Application - fields = '__all__' - diff --git a/core/views/vacancies.py b/core/views/vacancies.py index b3c6448107e05f9eef54a81476f0e190778d7722..ac3c2b41bceeaaae007d3dc561b096c9f134a1d7 100644 --- a/core/views/vacancies.py +++ b/core/views/vacancies.py @@ -4,8 +4,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, Application -from core.serializers.vacancies import VacancySerializer, ApplicationSerializer +from core.models.vacancies import Vacancy +from core.serializers.vacancies import VacancySerializer class VacancyViewSet(viewsets.ModelViewSet): @@ -14,11 +14,27 @@ class VacancyViewSet(viewsets.ModelViewSet): permission_classes = [IsAdminOrCompany] -class ApplicationViewSet(viewsets.ModelViewSet): - queryset = Application.objects.all() - serializer_class = ApplicationSerializer +class ApplicationViewSet(viewsets.GenericViewSet): + serializer_class = VacancySerializer permission_classes = [IsAdminOrStudent] + def list(self, request, student_id): + student = get_object_or_404(Student.objects.all(), pk=student_id) + vacancies = self.serializer_class(student.applied_vacancies, many=True, context={'request': request}) + return Response(vacancies.data) + + def create(self, request, student_id): + vacancy = get_object_or_404(Vacancy.objects.all(), pk=request.data['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) + + 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) + class BookmarkedVacancyByStudentViewSet(viewsets.GenericViewSet): serializer_class = VacancySerializer diff --git a/kape/urls.py b/kape/urls.py index 1b7c68c0751fda5079fb3ed94ec4f90703a02bec..e64d65ec009245893612f02dd9ceace2bfc90357 100755 --- a/kape/urls.py +++ b/kape/urls.py @@ -23,7 +23,7 @@ from rest_framework_swagger.views import get_swagger_view from core import apps from core.views.accounts import StudentViewSet, CompanyViewSet, SupervisorViewSet, UserViewSet, LoginViewSet -from core.views.vacancies import VacancyViewSet, ApplicationViewSet +from core.views.vacancies import VacancyViewSet, BookmarkedVacancyByStudentViewSet, ApplicationViewSet schema_view = get_swagger_view() router = routers.DefaultRouter() @@ -33,7 +33,11 @@ router.register(r'companies', CompanyViewSet) router.register(r'supervisors', SupervisorViewSet) router.register(r'login', LoginViewSet) router.register(r'vacancies', VacancyViewSet) -router.register(r'applications', ApplicationViewSet) +router.register(r'students/(?P<student_id>\d+)/bookmarked-vacancies', BookmarkedVacancyByStudentViewSet, + base_name='bookmarked-vacancy-list') +router.register(r'students/(?P<student_id>\d+)/applications', ApplicationViewSet, + base_name='applications') + urlpatterns = static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) urlpatterns += [