I have two forms in one template, but one of them doesn't have data to my
database.
Why does it happen and how to fix it?
When I fill out the Pack form and press "submit" the terminal shows that:
"POST" /sklad HTTP/1.1" 200 9937
This data doesn't save to my database.
When I fill out the Sklad form and press "submit" the terminal shows that:
"POST" /sklad HTTP/1.1" 302 0
This data saves to my database fine.
views.py
class SkladCreateView(LoginRequiredMixin, CustomSuccessMessageMixin,
CreateView):
model = Sklad
template_name = 'sklad.html'
form_class = SkladForm
success_url = reverse_lazy('sklad')
success_msg = 'Материал сохранён'
def get_context_data(self, **kwargs):
kwargs['sklad_form'] = SkladForm
kwargs['pack_form'] = PackForm
kwargs['list_sklad'] = Sklad.objects.all().order_by('material')
kwargs['list_pack'] = Pack.objects.all().order_by('name_pack')
return super().get_context_data(**kwargs)
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.author = self.request.user
self.object.save()
return super().form_valid(form)
models.py
class Sklad(models.Model):
author = models.ForeignKey(User, on_delete = models.CASCADE,
verbose_name='автор склада', null=True)
material = models.CharField('название', max_length=200)
unit = models.CharField('единица измерения', max_length=200)
description = models.CharField('описание', max_length=200, null=True)
price_buy = models.IntegerField('цена закупки', )
price_sell = models.IntegerField('цена продажи', )
amount = models.IntegerField('количество', default='0')
def __str__(self):
return self.material
class Pack(models.Model):
author = models.ForeignKey(User, on_delete = models.CASCADE,
verbose_name='автор упаковки', null=True)
name_pack = models.CharField('название', max_length=100)
price_pack = models.IntegerField('цена', )
def __str__(self):
return self.name_pack
forms.py
class SkladForm(forms.ModelForm):
class Meta:
model = Sklad
fields = (
'material',
'unit',
'description',
'price_buy',
'price_sell',
'amount',
)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for field in self.fields:
self.fields[field].widget.attrs['class'] = 'form-control'
class PackForm(forms.ModelForm):
class Meta:
model = Pack
fields = (
'name_pack',
'price_pack',
)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for field in self.fields:
self.fields[field].widget.attrs['class'] = 'form-control'
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/dc035331-23e6-483e-b6d1-ba8847e2abe6%40googlegroups.com.