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.

Reply via email to