Django. Modelformset. I have a problem with id. When receiving a POST request, the ID in the records is None

Stages of the recording path:

  1. Before rendering the page in the view ID is
  2. There is an ID on the page in the browser (in form.instance.id)
  3. When the form is saved (submit), a POST request is sent and there is no ID in the received data in the form instances

models.py:

class WebsiteServiceBlocks(models.Model):
    image = models.ImageField(upload_to='images/', null=True, blank=True)
    name = models.CharField(max_length=255, null=True, blank=True)
    description = models.TextField(null=True, blank=True)

form.py:

class WebsiteServiceBlocksForm(forms.ModelForm):
    class Meta:
        model = models.WebsiteServiceBlocks
        fields = ['image', 'name', 'description']
        widgets = {
            'image': forms.FileInput(attrs={
                'class': 'form-control-file',
            }),
            'name': forms.TextInput(attrs={
                'class': 'form-control',
                'placeholder': 'Введите название услуги',
                'rows': '3',
            }),
            'description': forms.Textarea(attrs={
                'class': 'form-control',
                'rows': '3',
                'placeholder': 'Введите описание услуги',
            }),
        }

views.py:

def website_services_view(request):

    # Main page block instances & forms

    formset_instances = models.WebsiteServiceBlocks.objects.all()

    MainPageServiceBlocksFormset = modelformset_factory(
        model=models.WebsiteServiceBlocks,
        form=forms.WebsiteServiceBlocksForm,
        fields=('image', 'name', 'description'),
        extra=0,
    )

    if not models.WebsiteServiceBlocks.objects.count() > 0:
        models.WebsiteServiceBlocks.objects.bulk_create(
            [models.WebsiteServiceBlocks() for i in range(3)]
        )

    block_formset = MainPageServiceBlocksFormset(
        request.POST or None, request.FILES or None,
        queryset=formset_instances,
        prefix='service_blocks_form',
    )

    for form in block_formset:
        form.fields['id'].required = False

    # Main page SEO instance & form

    website_service: models.WebsiteService = models.WebsiteService.get_solo()

    if website_service.seo is None:
        website_service.seo = models.SEO.objects.create()
        website_service.save()

    seo_form = forms.SEOForm(
        request.POST or None,
        instance=website_service.seo,
        prefix='service_seo_form',
    )

    # Method POST & form-save

    alerts = []
    if request.method == 'POST':
        if block_formset.is_valid():
            for service_blocks_form in block_formset:
                instance = service_blocks_form.save(commit=False)
            alerts.append('Услуги сохранены успешно!')

        utils.form_save(seo_form, alerts, 'Настройки SEO сохранены успешно!')

    # Context packing & render

    context = {
        'formset': block_formset,
        'seo_form': seo_form,
        'alerts': alerts,
    }
    return render(request, 'admin/website/services.html', context)

Ответы (0 шт):