Add review app

remotes/origin/setup
Mukhtar 10 years ago
parent bcdd5707a6
commit e8ab6430da
  1. 2
      archilance/settings/base.py
  2. 53
      projects/templates/projects/project_form.html
  3. 59
      projects/views.py
  4. 0
      review/__init__.py
  5. 4
      review/admin.py
  6. 5
      review/apps.py
  7. 30
      review/migrations/0001_initial.py
  8. 27
      review/migrations/0002_auto_20160531_0906.py
  9. 0
      review/migrations/__init__.py
  10. 16
      review/models.py
  11. 3
      review/tests.py
  12. 3
      review/views.py
  13. 0
      worksell/__init__.py
  14. 3
      worksell/admin.py
  15. 5
      worksell/apps.py
  16. 0
      worksell/migrations/__init__.py
  17. 9
      worksell/models.py
  18. 3
      worksell/tests.py
  19. 3
      worksell/views.py

@ -40,6 +40,8 @@ LOCAL_APPS = [
'projects',
'specializations',
'users',
'review',
'worksell',
]

@ -9,22 +9,18 @@
<form method="post">
{% csrf_token %}
<div class="chatBlock new-rass new-rass2 disTab">
{{ form.errors }}
{{ project_form.errors }}
<div class="col-lg-9">
<p class="new-pp new-pp3">Формирование заказа</p>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Название заказа</p>
<input type="text" class="box-sizing" name="{{ form.name.name }}"/>
{{ form.name.errors }}
<input type="text" class="box-sizing" name="{{ project_form.name.name }}"/>
{{ project_form.name.errors }}
</div>
<div class="textAreaBlock2 text-nn box-sizing disTab">
<p>Подробно опишите задание</p>
<textarea name="{{ form.text.name }}" id="text-new"></textarea>
<textarea name="{{ project_form.text.name }}" id="text-new"></textarea>
</div>
</div>
<div class="col-lg-3 wrChat1">
@ -50,12 +46,12 @@
<p class="type-work">Тип работы:</p>
<div class="mail-block type-work-inset">
<div class="inset-mb">
<label><input type="radio" value="1" name="{{ form.type_work.name }}"><span></span></label>
<label><input type="radio" value="1" name="{{ project_form.type_work.name }}"><span></span></label>
<p>Проектирование</p>
</div>
<div class="inset-mb">
<label><input type="radio" value="2" name="{{ form.type_work.name }}"><span></span></label>
<label><input type="radio" value="2" name="{{ project_form.type_work.name }}"><span></span></label>
<p>Техническое сопровождение</p>
</div>
</div>
@ -76,9 +72,11 @@
<div class="polsF1 disTab">
<div class="col-lg-3">
{# {{ form.specialization }}#}
<select id="specialization1" name="{{ form.specialization.name }}">
</select>
{# <select id="specialization1" name="{{ project_form.specialization.name }}">#}
{# </select>#}
{{ project_form.specialization }}
</div>
<div class="col-lg-3">
<select class="selectpicker">
@ -108,7 +106,7 @@
</div>
<div class="searchF1 polsF1 polsFF">
<div class="col-lg-4">
<input type="text" name="{{ form.price.name }}" class="box-sizing surr">
<input type="text" name="{{ project_form.price.name }}" class="box-sizing surr">
<select class="selectpicker2 valul">
<option>&#36;</option>
<option>&#36;</option>
@ -174,24 +172,24 @@
</div>
<div class="polsF1 polsF2 disTab">
<div class="col-lg-3">
<select class="selectpicker">
<select class="selectpicker" >
<option>Mustard</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
</div>
<div class="col-lg-3">
<input type="text" class="box-sizing surr surr2">
<input type="text" class="box-sizing surr surr2" name="{{ realty_form.name.name }}">
</div>
<div class="col-lg-3">
<select class="selectpicker">
<select class="selectpicker" name="{{ realty_form.building_classification.name }}">
<option>Mustard</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
</div>
<div class="col-lg-3">
<select class="selectpicker">
<select class="selectpicker" name="{{ realty_form.type_construction.name }}">
<option>Mustard</option>
<option>Ketchup</option>
<option>Relish</option>
@ -203,14 +201,14 @@
</div>
<div class="polsF1 polsF2 disTab">
<div class="col-lg-3">
<select class="selectpicker">
<select class="selectpicker" name="{{ realty_form.country.name }}">
<option>Страна</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
</div>
<div class="col-lg-3">
<select class="selectpicker">
<select class="selectpicker" {{ realty_form.city.name }}>
<option>Город</option>
<option>Ketchup</option>
<option>Relish</option>
@ -222,18 +220,21 @@
</div>
</div>
{# <div class="searchF1 polsF1 polsFF links-filter">#}
{# <a href="javascript:void(0)">Разместить проект</a>#}
{# <a href="javascript:void(0)">Сохранить</a>#}
{##}
{# </div>#}
<div class="searchF1 polsF1 polsFF links-filter">
<input style="border-radius: 40px;
font-family: 'pfdintextcomppro-regular', sans-serif;color: black;font-size: 16px;padding: 17px 33px 17px 33px;
float: left;margin: 0 15px 48px 15px;border: 1px solid #DFDFDF;text-transform: uppercase;
letter-spacing: 2px;color: #42B476;border: 1px solid #42B476" type="submit" value="Разместить проект" />
<a href="javascript:void(0)">Сохранить</a>
</div>
</div>
</div>
</div>
<input type="submit" value="Submit"/>
</form>

@ -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

@ -0,0 +1,4 @@
from django.contrib import admin
from .models import Review
admin.site.register(Review)

@ -0,0 +1,5 @@
from django.apps import AppConfig
class ReviewConfig(AppConfig):
name = 'review'

@ -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)),
],
),
]

@ -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,
),
]

@ -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 = 'Отзывы'

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

@ -0,0 +1,3 @@
from django.shortcuts import render
# Create your views here.

@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

@ -0,0 +1,5 @@
from django.apps import AppConfig
class WorksellConfig(AppConfig):
name = 'worksell'

@ -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

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

@ -0,0 +1,3 @@
from django.shortcuts import render
# Create your views here.
Loading…
Cancel
Save