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):
type_of_room = forms.ChoiceField(choices=Order.TYPE_OF_ROOM_CHOICES, required=False, label="Тип квартиры",
widget=forms.RadioSelect(attrs={"class": "inline-input"}))
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):
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
class OrderImage(models.Model):
MAX_IMAGES = 10
order = models.ForeignKey(Order, on_delete=models.CASCADE, related_name="order", verbose_name="Заказ")
image = models.ImageField(upload_to=_upload_image_filename, verbose_name="Картинка",
width_field=None, height_field=None)

View File

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

View File

@ -42,7 +42,7 @@
<h3>тут должна быть форма создания заказа, собсна вот она</h3>
<form action="{% url 'order-create' %}" method="POST">
<form action="{% url 'order-create' %}" method="POST" enctype="multipart/form-data">
{% csrf_token %}
{# <table>#}
{# <tbody> <!-- такой вариант не катит, форма не будет такой как на сайте, придется писать все ручками... -->#}
@ -57,8 +57,14 @@
<div class="form-section-wrapper">
<h2>Внешний вид</h2>
<div>
<h4>Тут будут картинки</h4>
<h4>Тут будет файл проекта</h4>
<div class="form-field-wrapper">
<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>