Reputation: 510
In my application there must be two inputs which will get numbers, and when I'll clickcreate
button in the given range (which was written in inputs) difference of that number times object must be created. For example, in first input I'll write "2", in second "5", 3 objects must be created. Here are my codes:
models.py
:
class Blank(models.Model):
blank_series = models.CharField(_('Blankın seriyası'), max_length=3)
number_from = models.IntegerField()
number_to = models.IntegerField()
def __str__(self):
return self.blank_series
forms.py
:
from django.forms import ModelForm
from .models import Blank
class CreateBlankForm(ModelForm):
class Meta:
model = Blank
fields = '__all__'
html
:
<tr>
<td>{{ form.blank_series.label }}</td>
<td>{{ form.blank_series }}</td>
</tr>
<tr>
<td>{{ form.blank_number.label }}</td>
<td>
{{ form.number_from }}
{{ form.number_to }}
</td>
</tr>
<tr>
<td class="create-blank-btns">
<button class="create-blank-btn"><span class="material-icons">add_circle_outline</span><input type="submit" value="Əlavə et" name="create-blank"></button>
</td>
</tr>
views.py
:
@login_required(login_url='sign-in')
def blanks(request):
if request.method == 'POST':
form = CreateBlankForm(request.POST)
if form.is_valid():
form.save()
else:
form = CreateBlankForm()
blanks = Blank.objects.all()
context = {
'form': form,
'blanks': blanks,
}
return render(request, 'blank.html', context)
Upvotes: 0
Views: 2305
Reputation: 820
you can do this in two ways 1)override save method in model form 2)get cleaned data in the view and save multiple times
1)override save method in model form in the model form
class CreateBlankForm(ModelForm):
class Meta:
model = Blank
fields = '__all__'
def save(self, *args, **kwargs):
times = self.number_to - self.number_from
for i in times:
super(CreateBlankForm).save(*args, **kwargs)
2)get the cleaned data on the view get the cleaned data and loop over in save method
@login_required(login_url='sign-in')
def blanks(request):
if request.method == 'POST':
form = CreateBlankForm(request.POST)
if form.is_valid():
times = form.cleanded_data['number_to'] - form.cleaned_data['number_from']
for i in times:
form.save()
else:
form = CreateBlankForm()
blanks = Blank.objects.all()
context = {
'form': form,
'blanks': blanks,
}
return render(request, 'blank.html', context)
Upvotes: 1