From e8ab6430da8a3e06108f9678fd9e21f297afe997 Mon Sep 17 00:00:00 2001 From: Mukhtar Date: Tue, 31 May 2016 12:08:56 +0300 Subject: [PATCH] Add review app --- archilance/settings/base.py | 2 + projects/templates/projects/project_form.html | 53 +++++++++-------- projects/views.py | 59 ++++++++++++++----- review/__init__.py | 0 review/admin.py | 4 ++ review/apps.py | 5 ++ review/migrations/0001_initial.py | 30 ++++++++++ review/migrations/0002_auto_20160531_0906.py | 27 +++++++++ review/migrations/__init__.py | 0 review/models.py | 16 +++++ review/tests.py | 3 + review/views.py | 3 + worksell/__init__.py | 0 worksell/admin.py | 3 + worksell/apps.py | 5 ++ worksell/migrations/__init__.py | 0 worksell/models.py | 9 +++ worksell/tests.py | 3 + worksell/views.py | 3 + 19 files changed, 183 insertions(+), 42 deletions(-) create mode 100644 review/__init__.py create mode 100644 review/admin.py create mode 100644 review/apps.py create mode 100644 review/migrations/0001_initial.py create mode 100644 review/migrations/0002_auto_20160531_0906.py create mode 100644 review/migrations/__init__.py create mode 100644 review/models.py create mode 100644 review/tests.py create mode 100644 review/views.py create mode 100644 worksell/__init__.py create mode 100644 worksell/admin.py create mode 100644 worksell/apps.py create mode 100644 worksell/migrations/__init__.py create mode 100644 worksell/models.py create mode 100644 worksell/tests.py create mode 100644 worksell/views.py diff --git a/archilance/settings/base.py b/archilance/settings/base.py index 38df455..0c55f49 100644 --- a/archilance/settings/base.py +++ b/archilance/settings/base.py @@ -40,6 +40,8 @@ LOCAL_APPS = [ 'projects', 'specializations', 'users', + 'review', + 'worksell', ] diff --git a/projects/templates/projects/project_form.html b/projects/templates/projects/project_form.html index b223de2..8685b88 100644 --- a/projects/templates/projects/project_form.html +++ b/projects/templates/projects/project_form.html @@ -9,22 +9,18 @@
{% csrf_token %} - -
- - - {{ form.errors }} + {{ project_form.errors }}

Формирование заказа

Название заказа

- - {{ form.name.errors }} + + {{ project_form.name.errors }}

Подробно опишите задание

- +
@@ -50,12 +46,12 @@

Тип работы:

- +

Проектирование

- +

Техническое сопровождение

@@ -76,9 +72,11 @@
- {# {{ form.specialization }}#} - + +{# #} + + {{ project_form.specialization }}
+ +
- +
-
- @@ -203,14 +201,14 @@
-
- @@ -222,18 +220,21 @@
- {# #} +
- +
diff --git a/projects/views.py b/projects/views.py index 75c1d9a..ea6bf1f 100644 --- a/projects/views.py +++ b/projects/views.py @@ -1,4 +1,4 @@ -from django.http import HttpResponseForbidden +from django.http import HttpResponseForbidden, HttpResponseRedirect from django.core.urlresolvers import reverse from django.contrib.auth.mixins import PermissionRequiredMixin from django.views.generic import ListView, DetailView, CreateView, View, TemplateView @@ -52,19 +52,19 @@ class ProjectDetailView(FormMixin, DetailView): return super().form_valid(form) -class ProjectCreateView(CreateView): - model = Project - # permission_required = ('projects.add_project',) - raise_exception = True - form_class = ProjectForm - success_url = '/projects/' # TODO: Use `reverse_lazy('projects-list')` from `django.core.urlresolvers` - - def form_valid(self, form): - project = form.instance - project.user = self.request.user - project.save() - - return super().form_valid(form) +# class ProjectCreateView(CreateView): +# model = Project +# # permission_required = ('projects.add_project',) +# raise_exception = True +# form_class = ProjectForm +# success_url = '/projects/' # TODO: Use `reverse_lazy('projects-list')` from `django.core.urlresolvers` +# +# def form_valid(self, form): +# project = form.instance +# project.user = self.request.user +# project.save() +# +# return super().form_valid(form) class PortfolioCreateView(PermissionRequiredMixin, CreateView): @@ -73,9 +73,36 @@ class PortfolioCreateView(PermissionRequiredMixin, CreateView): permission_required = ('projects.add_portfolio',) success_url = '/projects/' -# import code; code.interact(local=dict(globals(), **locals())) +class ProjectCreateView(PermissionRequiredMixin, View): + permission_required = ('projects.add_project',) + project_form = ProjectForm + realty_form = RealtyForm + template_name = 'projects/project_form.html' + + def get(self, request, *args, **kwargs): + project_form = self.project_form() + realty_form = self.realty_form(prefix='realty_form') + return render(request, self.template_name, {'project_form': project_form , 'realty_form': realty_form}) + + def post(self, request, *args, **kwargs): + project_form = self.project_form(request.POST) + realty_form = self.realty_form(request.POST, prefix='realty_form') + if project_form.is_valid() and realty_form.is_valid(): + return self.form_valid(request, project_form, realty_form) + return render(request, self.template_name, {'project_form': project_form , 'realty_form': realty_form}) + + def form_valid(self, request, project_form, realty_form): + realty = realty_form.save(commit=False) + realty.user = request.user + realty.save() + project = project_form.save(commit=False) + project.user = request.user + project.realty = realty + project.save() + return HttpResponseRedirect('/projects/') + + -from django.http import HttpResponseRedirect class TestView(View): template_name = 'projects/test_form.html' form_class = RealtyForm diff --git a/review/__init__.py b/review/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/review/admin.py b/review/admin.py new file mode 100644 index 0000000..31b5855 --- /dev/null +++ b/review/admin.py @@ -0,0 +1,4 @@ +from django.contrib import admin +from .models import Review + +admin.site.register(Review) diff --git a/review/apps.py b/review/apps.py new file mode 100644 index 0000000..5de2983 --- /dev/null +++ b/review/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class ReviewConfig(AppConfig): + name = 'review' diff --git a/review/migrations/0001_initial.py b/review/migrations/0001_initial.py new file mode 100644 index 0000000..aed362d --- /dev/null +++ b/review/migrations/0001_initial.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.6 on 2016-05-31 08:46 +from __future__ import unicode_literals + +from django.conf import settings +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Review', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('text', models.TextField()), + ('stars', models.IntegerField(validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(5)])), + ('is_secured', models.BooleanField(default=False)), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reviews', to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/review/migrations/0002_auto_20160531_0906.py b/review/migrations/0002_auto_20160531_0906.py new file mode 100644 index 0000000..4e62d16 --- /dev/null +++ b/review/migrations/0002_auto_20160531_0906.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.6 on 2016-05-31 09:06 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('projects', '0012_auto_20160530_1355'), + ('review', '0001_initial'), + ] + + operations = [ + migrations.AlterModelOptions( + name='review', + options={'verbose_name': 'Отзыв', 'verbose_name_plural': 'Отзывы'}, + ), + migrations.AddField( + model_name='review', + name='project', + field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, related_name='reviews', to='projects.Project'), + preserve_default=False, + ), + ] diff --git a/review/migrations/__init__.py b/review/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/review/models.py b/review/models.py new file mode 100644 index 0000000..db574df --- /dev/null +++ b/review/models.py @@ -0,0 +1,16 @@ +from django.db import models +from django.core.validators import MaxValueValidator, MinValueValidator + +class Review(models.Model): + text = models.TextField() + project = models.ForeignKey("projects.Project", related_name='reviews') + user = models.ForeignKey("users.User", related_name='reviews') + stars = models.IntegerField(validators=[MinValueValidator(1), MaxValueValidator(5)]) + is_secured = models.BooleanField(default=False) + + def __str__(self): + return self.pk + + class Meta: + verbose_name = 'Отзыв' + verbose_name_plural = 'Отзывы' diff --git a/review/tests.py b/review/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/review/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/review/views.py b/review/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/review/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/worksell/__init__.py b/worksell/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/worksell/admin.py b/worksell/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/worksell/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/worksell/apps.py b/worksell/apps.py new file mode 100644 index 0000000..0c6ce4d --- /dev/null +++ b/worksell/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class WorksellConfig(AppConfig): + name = 'worksell' diff --git a/worksell/migrations/__init__.py b/worksell/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/worksell/models.py b/worksell/models.py new file mode 100644 index 0000000..05636ed --- /dev/null +++ b/worksell/models.py @@ -0,0 +1,9 @@ +from django.db import models + +class WorkSell(models.Model): + name = models.CharField(max_length=255) + description = models.TextField(blank=True) + img = models.ImageField(upload_to='worksell/worksell') + + def __str__(self): + return self.name diff --git a/worksell/tests.py b/worksell/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/worksell/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/worksell/views.py b/worksell/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/worksell/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here.