Как дублировать форму но оставить для неё одну кнопку и красивый вывод
Есть модель придуманного товара. хочу сделать поиск товара по двум разным размерам (длина и ширина), но выводить только если товар с таким названием есть в обоих размерах.
Так вот форму сделал некрасивую, как сделать , чтобы вывод был примерно таким(Рисовал в paint=) )
А то у меня всё идёт как <p>
И в приоритете, чтоб форма была именно models.Form, но если знаете как сделать такой вывод с forms.Form Обязательно пишите. Кнопка одна должна быть
models.py
from django.db import models
# Create your models here.
class Good(models.Model):
name = models.CharField(max_length = 50)
height = models.IntegerField()
width = models.IntegerField()
diameter = models.IntegerField()
def __str__(self):
return self.name
forms.py
from django import forms
from django.core import validators
from goods.models import Good
def check_for_positive(value):
if value <= 0:
raise forms.ValidationError('NEEDS TO BE GREATER THEAN 0!')
#class DoubleCheck(forms.ModelForm):
# Form Fields go here
# class Meta:
# model = Good
# exclude = ['name'] # Exclude name
class DoubleCheck(forms.Form):
height1 = forms.IntegerField(validators = [check_for_positive])
width1 = forms.IntegerField(validators = [check_for_positive])
diameter1 = forms.IntegerField(validators = [check_for_positive])
height2 = forms.IntegerField(validators = [check_for_positive])
width2 = forms.IntegerField(validators = [check_for_positive])
diameter2 = forms.IntegerField(validators = [check_for_positive])
botcather = forms.CharField(required = False, widget = forms.HiddenInput, validators = [validators.MaxLengthValidator(0)])
views.py
from django.shortcuts import render
from goods.models import Good
from . import forms
from django.contrib.auth.forms import UserCreationForm
# Create your views here.
def storage(request):
goods_list = Good.objects.order_by('name')
goods_dict = {'goods_list':goods_list}
return render(request, 'goods/storage.html', context = goods_dict)
def search(request):
form = forms.DoubleCheck
form_dict = {'form':form,
'result':False}
if request.method == 'POST':
form = forms.DoubleCheck(request.POST)
if form.is_valid():
print('VALIDATION SUCCESS!')
height_user1 = form.cleaned_data.get('height1')
width_user1 = form.cleaned_data.get('width1')
diameter_user1 = form.cleaned_data.get('diameter1')
height_user2 = form.cleaned_data.get('height2')
width_user2 = form.cleaned_data.get('width2')
diameter_user2 = form.cleaned_data.get('diameter2')
g1 = Good.objects.all().filter(height = height_user1, width = width_user1, diameter = diameter_user1)
g2 = Good.objects.all().filter(height = height_user2, width = width_user2, diameter = diameter_user2)
l1 = [i.name for i in g1]
l2 = [c.name for c in g2]
result = [name for name in l1 if name in l2]
form_dict['result'] = result
return render(request, 'goods/search.html', context = form_dict)
def registerPage(request):
form = UserCreationForm()
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
print('========SUCCESS========')
form.save()
context = {'form':form}
return render(request, 'goods/register.html', context)
def loginPage(request):
context = {}
return render(request, 'goods/login.html', context)
search.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Search</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
</head>
<body>
<div class="container">
<div class="jumbotron">
<h1 class="display-4">Hello, world!</h1>
<p class="lead">You can type two kind of parametres to look for goods that relate to this parametres and have the same name</p>
<hr class="my-4">
<form method="POST">
{{form.as_ul}}
{% csrf_token %}
<input type="submit" class="btn btn-primary" value="Submit">
</form>
{% if result %}
<h3><em>Result: {{result}}</em></h3>
{% endif %}
</div>
</div>
</body>
</html>
Ответы (1 шт):
Автор решения: m0nte-cr1st0
→ Ссылка
Верным решением в данном случае есть использование ModelForm и prefix
forms
class DoubleCheckForm(forms.ModelForm):
class Meta:
model = Good
exclude = ['name']
views
first_form = DoubleCheckForm(prefix="first_form")
second_form = DoubleCheckForm(prefix="second_form")
form_dict = {'first_form': first_form, 'second_form': second_form}
template
<form method="POST">
{% csrf_token %}
{{ first_form.as_ul }}
{{ second_form.as_ul }}
<input type="submit" value="Submit">
</form>