#ARC-12 Adding and editing files in project creation and editing

remotes/origin/setup
ArturBaybulatov 10 years ago
parent 813ca37ec1
commit 53bb1fd0d4
  1. 5
      assets/index.js
  2. 7
      projects/forms.py
  3. 30
      projects/migrations/0035_auto_20160630_1635.py
  4. 2
      projects/models.py
  5. 1
      projects/templates/customer_project_create.html
  6. 12
      projects/templates/customer_project_edit.html
  7. 57
      projects/views.py

@ -87,3 +87,8 @@ $fileUploadContainer.on('click', '.file-upload-remove-btn', function($evt) {
var $btn = $(this)
$btn.parent('.file-upload-widget').remove()
})
$fileUploadContainer.on('click', '.existing-file-remove-btn', function($evt) {
var $btn = $(this)
$btn.parent('.existing-file-widget').remove()
})

@ -15,7 +15,12 @@ class ProjectsForm(forms.Form):
class CustomerProjectEditForm(forms.ModelForm):
files = forms.ModelMultipleChoiceField(queryset=ProjectFile.objects.none(), required=False)
files = forms.ModelMultipleChoiceField(
queryset=ProjectFile.objects.none(),
widget=forms.CheckboxSelectMultiple,
required=False,
)
specialization = TreeNodeChoiceField(queryset=Specialization.objects.exclude(id=1))
class Meta:

@ -0,0 +1,30 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-06-30 13:35
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('projects', '0034_auto_20160622_1200'),
]
operations = [
migrations.AlterModelOptions(
name='buildingclassfication',
options={'verbose_name': 'Тип здания', 'verbose_name_plural': 'Типы зданий'},
),
migrations.AlterField(
model_name='project',
name='work_type',
field=models.IntegerField(choices=[(1, 'Проектирование'), (2, 'Техническое сопровождение')], default=1),
),
migrations.AlterField(
model_name='projectfile',
name='project',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='files', to='projects.Project'),
),
]

@ -103,7 +103,7 @@ class Project(models.Model):
class ProjectFile(models.Model):
file = models.FileField(upload_to='projects/project_files')
project = models.ForeignKey(Project, related_name='files')
project = models.ForeignKey(Project, related_name='files', blank=True, null=True)
class Meta:
verbose_name = 'Файл проекта'

@ -276,7 +276,6 @@
</div>
{# <input type="hidden" name="next" value="{% url 'projects:detail' pk=pk %}">#}
{# {% if back %}<a href='{{ back }}'>Назад</a>{% endif %}#}

@ -43,11 +43,10 @@
<ul class="list-new-new">
{% for file in form.files.field.queryset.all %}
<li class="f--ile-upload-widget">
<input type="checkbox" name="{{ form.budget.html_name }}" value="{{ file.pk }}" checked>
{# <p class="file-upload-label">{{ file.file.name|basename }}</p>#}
{# <p class="file-upload-label">{{ file.pk }}</p>#}
{# <div class="file-upload-remove-btn"></div>#}
<li class="existing-file-widget">
<input type="checkbox" name="{{ form.files.html_name }}" value="{{ file.pk }}" checked style='display: none'>
<p class="file-upload-label">{{ file.file.name|basename }} {{ file.file.size|filesizeformat }}</p>
<div class="existing-file-remove-btn"></div>
</li>
{% endfor %}
@ -285,8 +284,7 @@
</div>
{# <input type="hidden" name="next" value="{% url 'projects:detail' pk=pk %}">#}
{# {% if back %}<a href='{{ back }}'>Назад</a>{% endif %}#}
<input type="hidden" name="next" value="{% url 'projects:detail' pk=pk %}">
<div class="searchF1 polsF1 polsFF links-filter">

@ -149,21 +149,56 @@ class CustomerProjectEditView(BaseMixin, View):
def post(self, request, *args, **kwargs):
if request.user.is_authenticated() and request.user.is_customer():
project = get_object_or_404(request.user.projects, pk=kwargs.get('pk'))
form = self.form_class(_.merge({}, request.POST, kwargs), request.FILES, request=request, instance=project)
form = self.form_class(request.POST, request.FILES, request=request, instance=project)
if form.is_valid():
# .....
#
# messages.info(request, 'Проект успешно отредактирован')
# redirect_to = request.POST.get('next')
# return redirect(redirect_to)
form.is_valid()
realty = form.cleaned_data.get('realty')
if realty:
realty_form = self.realty_form(request.POST, instance=realty, request=request, prefix='realty_form')
else:
realty_form = self.realty_form(request.POST, request=request, prefix='realty_form')
if form.is_valid() and realty_form.is_valid():
project = form.save(commit=False)
project.customer = request.user
project.files = form.cleaned_data.get('files') # TODO: Somehow get rid of this explicit assignment
project.save()
form.save_m2m()
for file in request.FILES.getlist('new_files'):
proj_file = ProjectFile.objects.create(file=file, project=project)
proj_file.save()
if realty:
realty_form.save()
else:
realty = realty_form.save(commit=False)
realty.user = request.user
realty.save()
realty_form.save_m2m()
project.realty = realty # Connect a realty with a project
project.save()
import code; code.interact(local=dict(globals(), **locals()))
messages.info(request, 'Проект успешно отредактирован')
redirect_to = request.POST.get('next')
return redirect(redirect_to)
else:
context = self.get_context_data(**kwargs)
context.update({'form': form})
if form.errors:
messages.info(request, (
'<p>Произошла ошибка (form)</p>'
'<pre>{form}</pre>'
).format(form=pformat(form.errors)))
messages.info(request, 'Произошла ошибка: <pre>{msg}</pre>'.format(msg=pformat(form.errors)))
if realty_form and realty_form.errors:
messages.info(request, (
'<p>Произошла ошибка (realty_form)</p>'
'<pre>{realty_form}</pre>'
).format(realty_form=pformat(realty_form.errors)))
context = self.get_context_data(**kwargs)
context.update({'form': form, 'realty_form': realty_form})
return render(request, self.template_name, context)
else:
return HttpResponseForbidden('403 Forbidden')

Loading…
Cancel
Save