При сохранении ModelFormSet считывается вся базовая таблица?

Я не знаю, как объяснить проблему в моем заголовке, поэтому, если кто-то знает, как лучше сформулировать проблему, которую я собираюсь описать, я надеюсь, что есть способ обновить плитку.

Должен сказать, что я уже пытался искать решение в google, но не смог найти ничего полезного. Я попытался следовать видео-учебнику (после прочтения официальной документации Django, конечно) Видео 01 Видео 02

Я использую старую версию Django, потому что мне нужно подключиться к базе данных MS SQL, и эта смесь python+django+mssql-backend - единственная работающая комбинация (я пробовал с последней версией Django и Python, но мне пришлось повозиться с mssql-backend, потому что было много ошибок об устаревших функциях, например ugettext_lazy вместо gettext_lazy и многое другое...)

Я пытаюсь создать небольшой интерфейс к уже существующей базе данных MS SQL (поэтому я не могу изменить структуру базы данных). Я все еще изучаю Django, так что я почти уверен, что проблема моя, я что-то неправильно понял :(

В настоящее время я создал страницу для поиска интересующих строк в таблице базы данных и страницу для редактирования всех результирующих строк из предыдущего поиска. Когда я отправляю форму с параметром поиска, я могу создать queryset, чтобы показать правильную форму для редактирования (например, поиск по номеру клиента, имени клиента и так далее). Но когда я что-то редактирую (например, меняю имя клиента...) и отправляю с помощью кнопки сохранения, "вызывается" правильный AnagraficheEditView (о котором сообщается ниже), но у меня больше нет фильтра поиска, поэтому я могу создать тот же кверисет, единственное, что я могу сделать

aefs = formset(request.POST or None, request.FILES or None)

Проблема в том, что при вызове formset.is_valid() django пытается выбрать из основной таблицы все строки (а у меня сейчас около 16 миллионов строк в этой таблице, так что это немного медленно :) )

Мне кажется, что я упускаю что-то важное.

Спасибо за любое предложение

forms.py

from django import forms
from django.db.models import query
from django.utils.translation import gettext_lazy as _

from .models import Anagrafiche

class AnagraficheSearchForm(forms.Form):
    idbatch       = forms.IntegerField(required=True, label='ID Batch')
    iderrore      = forms.CharField(max_length=256, required=False, label='Errore')
    codiceclifor  = forms.CharField(max_length=64, required=False, label='Codice Cliente')
    denominazione = forms.CharField(max_length=512, required=False, label='Denominazione')
    cfisc         = forms.CharField(max_length=16, required=False, label='Codice Fiscale')
    piva          = forms.CharField(max_length=11, required=False, label='Partita Iva')


class AnagraficheEditForm(forms.ModelForm):
    class Meta:
        model: Anagrafiche
        fields = ['idbatch', 'mandante', 'societa', 'codiceclifor', 'nome', 'cognome', 'ragsoc', 'cfisc', 'piva', 'codicedestinatariosdi', 'iderrore']
        labels = {
            'idbatch':               _('ID Batch'),
            'mandante':              _('Mandante'),
            'societa':               _('Societa'),
            'codiceclifor':          _('Codice Cliente'),
            
            'nome':                  _('Nome'),
            'cognome':               _('Cognome'),
            'ragsoc':                _('Ragione Sociale'),
            'cfisc':                 _('Codice Fiscale'),
            'piva':                  _('Partita Iva'),
            'codicedestinatariosdi': _('Codice SDI'),
            'iderrore':              _('Errore'),
        }
        widgets = {
            'idbatch':               forms.HiddenInput(),
            'mandante':              forms.HiddenInput(),
            'societa':               forms.HiddenInput(),
            'codiceclifor':          forms.HiddenInput(),
            }

Models.py

    from django.db import models
    from django.utils import translation
    
    # Create your models here.
    class Anagrafiche(models.Model):
        idbatch = models.IntegerField(db_column='IDBatch', primary_key=True)  # Field name made lowercase.
        mandante = models.CharField(db_column='Mandante', max_length=64)  # Field name made lowercase.
        societa = models.CharField(db_column='Societa', max_length=64)  # Field name made lowercase.
        codiceclifor = models.CharField(db_column='CodiceCliFor', max_length=64)  # Field name made lowercase.
        nome = models.CharField(db_column='Nome', max_length=256, blank=True, null=True)  # Field name made lowercase.
        cognome = models.CharField(db_column='Cognome', max_length=256, blank=True, null=True)  # Field name made lowercase.
        ragsoc = models.CharField(db_column='RagSoc', max_length=256, blank=True, null=True)  # Field name made lowercase.
#more fields here, removed for simplicity
        cfisc = models.CharField(db_column='CFisc', max_length=32, blank=True, null=True)  # Field name made lowercase.
        piva = models.CharField(db_column='PIVA', max_length=32, blank=True, null=True)  # Field name made lowercase.
        codicedestinatariosdi = models.CharField(db_column='CodiceDestinatarioSDI', max_length=64, blank=True, null=True)  # Field name made lowercase.
        iderrore = models.IntegerField(db_column='IDErrore', blank=True, null=True)  # Field name made lowercase.
    
        class Meta:
            managed = False
            #SQL Schemas :)
            db_table = 'enerp].[Anagrafiche'
            unique_together = (('idbatch', 'mandante', 'societa', 'codiceclifor'),)
            verbose_name = "Anagrafica"
            verbose_name_plural = "Anagrafiche"
    
        def __str__(self):
            if self.cognome != None:
                return self.codiceclifor + ' ' +  self.cognome + ' ' +  self.nome
            else:
                if self.ragsoc != None:
                    return self.codiceclifor + ' ' +  self.ragsoc
                else:
                    return self.codiceclifor

views.py

urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.ENERP),
    path('AnagraficheSearch', views.AnagraficheSearchView),
    path('AnagraficheEdit', views.AnagraficheEditView),
]

Шаблон Master DataEditPage.html

конфигурация среды

Вернуться на верх