Add images in order form

This commit is contained in:
vlados31 2022-10-03 10:38:45 +03:00
parent 0362fbcae6
commit 9918e7f5b5
4 changed files with 22 additions and 9 deletions

View File

@ -4,7 +4,6 @@ from .models import *
class BaseOrderCreationForm(forms.ModelForm): class BaseOrderCreationForm(forms.ModelForm):
type_of_room = forms.ChoiceField(choices=Order.TYPE_OF_ROOM_CHOICES, required=False, label="Тип квартиры", type_of_room = forms.ChoiceField(choices=Order.TYPE_OF_ROOM_CHOICES, required=False, label="Тип квартиры",
widget=forms.RadioSelect(attrs={"class": "inline-input"})) widget=forms.RadioSelect(attrs={"class": "inline-input"}))
is_require_design = forms.ChoiceField(choices=Order.REQUIRED_DESIGN_CHOICES, label="Требуется дизайн проект", is_require_design = forms.ChoiceField(choices=Order.REQUIRED_DESIGN_CHOICES, label="Требуется дизайн проект",

View File

@ -238,11 +238,13 @@ class Order(models.Model):
def _upload_image_filename(instance, filename): def _upload_image_filename(instance, filename):
name, ext = os.path.splitext(filename) name, ext = os.path.splitext(filename)
fn = sha256(str(datetime.now()).encode('utf-8')).hexdigest() + ext fn = sha256((str(datetime.now()) + name).encode('utf-8')).hexdigest() + ext
return "order-images/" + fn return "order-images/" + fn
class OrderImage(models.Model): class OrderImage(models.Model):
MAX_IMAGES = 10
order = models.ForeignKey(Order, on_delete=models.CASCADE, related_name="order", verbose_name="Заказ") order = models.ForeignKey(Order, on_delete=models.CASCADE, related_name="order", verbose_name="Заказ")
image = models.ImageField(upload_to=_upload_image_filename, verbose_name="Картинка", image = models.ImageField(upload_to=_upload_image_filename, verbose_name="Картинка",
width_field=None, height_field=None) width_field=None, height_field=None)

View File

@ -23,6 +23,10 @@ def order_create(request):
form = BaseOrderCreationForm(request.POST, instance=order) form = BaseOrderCreationForm(request.POST, instance=order)
if form.is_valid(): if form.is_valid():
form.save() form.save()
# сохраним файлы
files = request.FILES.getlist('images')
for img in files[:OrderImage.MAX_IMAGES]:
OrderImage(order=order, image=img).save()
return HttpResponseRedirect('/orders/') return HttpResponseRedirect('/orders/')
else: else:
form = BaseOrderCreationForm() form = BaseOrderCreationForm()
@ -32,10 +36,14 @@ def order_create(request):
form = UnregisteredUserOrderCreationForm(request.POST, instance=order) form = UnregisteredUserOrderCreationForm(request.POST, instance=order)
if form.is_valid(): if form.is_valid():
form.save() form.save()
# сохраним файлы
files = request.FILES.getlist('images')
for img in files[:OrderImage.MAX_IMAGES]:
OrderImage(order=order, image=img).save()
return HttpResponseRedirect('/dev') return HttpResponseRedirect('/dev')
else: else:
form = UnregisteredUserOrderCreationForm() form = UnregisteredUserOrderCreationForm()
print(form.visible_fields)
return render(request, 'orders/order-create.html', {'form': form}) return render(request, 'orders/order-create.html', {'form': form})
@ -62,6 +70,7 @@ def order_view(request, order_id):
except Exception: except Exception:
traceback.print_exc() traceback.print_exc()
render_vars["order"] = None render_vars["order"] = None
return render(request, 'orders/order-view.html', render_vars) return render(request, 'orders/order-view.html', render_vars)
@ -72,13 +81,10 @@ def order_respond(request, order_id):
action = None action = None
if "action" in request.POST: if "action" in request.POST:
action = request.POST["action"] action = request.POST["action"]
else:
print("order_respond: no action param found!")
if action == "respond": if action == "respond":
r = OrderRespond(order_id=order_id, user=request.user) r = OrderRespond(order_id=order_id, user=request.user)
r.save() r.save()
print("order_respond: save respond!")
if action == "unrespond": if action == "unrespond":
OrderRespond.objects.filter(order_id=order_id, user=request.user).delete() OrderRespond.objects.filter(order_id=order_id, user=request.user).delete()

View File

@ -42,7 +42,7 @@
<h3>тут должна быть форма создания заказа, собсна вот она</h3> <h3>тут должна быть форма создания заказа, собсна вот она</h3>
<form action="{% url 'order-create' %}" method="POST"> <form action="{% url 'order-create' %}" method="POST" enctype="multipart/form-data">
{% csrf_token %} {% csrf_token %}
{# <table>#} {# <table>#}
{# <tbody> <!-- такой вариант не катит, форма не будет такой как на сайте, придется писать все ручками... -->#} {# <tbody> <!-- такой вариант не катит, форма не будет такой как на сайте, придется писать все ручками... -->#}
@ -57,8 +57,14 @@
<div class="form-section-wrapper"> <div class="form-section-wrapper">
<h2>Внешний вид</h2> <h2>Внешний вид</h2>
<div> <div>
<h4>Тут будут картинки</h4> <div class="form-field-wrapper">
<h4>Тут будет файл проекта</h4> <label for="input-images">Фотографии</label>
<input id="input-images" type="file" name="images" accept="image/png, image/webp, image/jpeg" multiple size="3">
</div>
<div class="form-field-wrapper">
<label for="input-project-file">Проект помещения</label>
<input id="input-project-file" type="file" name="project-file" accept="application/pdf">
</div>
</div> </div>
</div> </div>