Python Django ModelForm-性能问题

Python Django ModelForm-性能问题,python,mysql,django,Python,Mysql,Django,我使用ModelForm允许同时编辑多行。它是一个非常简单的表单,有一系列的yes_no列。模型如下所示: models.py forms.py views.py 表单工作正常,get和post工作正常,但检索和更新需要一段时间(约30秒)。使用django调试工具栏,它看起来像是yn列分别为每行(~2k行)的每列检索。Yn表只有3行—1—未知、0—否、1—是 我试图寻找解决办法,以阻止Django每次检索900次击中DB的疯狂行为。我找到了一些关于缓存的东西,但我不知道怎么做 提前感谢。放入正

我使用ModelForm允许同时编辑多行。它是一个非常简单的表单,有一系列的yes_no列。模型如下所示:

models.py forms.py views.py 表单工作正常,get和post工作正常,但检索和更新需要一段时间(约30秒)。使用django调试工具栏,它看起来像是yn列分别为每行(~2k行)的每列检索。Yn表只有3行—1—未知、0—否、1—是

我试图寻找解决办法,以阻止Django每次检索900次击中DB的疯狂行为。我找到了一些关于缓存的东西,但我不知道怎么做


提前感谢。

放入正在进行数据检索的代码。使用视图编辑。希望这有帮助。您需要使用或最好使用预取来帮助提高检索速度。谢谢。放入正在进行数据检索的代码。用视图编辑。希望这有帮助。您需要使用或最好使用预取来帮助提高检索速度。谢谢
class Yn(models.Model):
    yn_id = models.IntegerField(primary_key=True)
    description = models.CharField(max_length=30)
    def __str__(self):
        return ' '.join([
            self.description,
        ])

    class Meta:
        managed = False
        db_table = 'yn'

class Invoice(models.Model):
    description = models.CharField(max_length=50)
    invoice_date = models.DateTimeField()
    ...
    invoice_sent_yn = models.ForeignKey('Yn', models.DO_NOTHING, db_column='invoice_sent_yn', related_name="invoice_sent_yn")
    confirm_receipt_yn = models.ForeignKey('Yn', models.DO_NOTHING, db_column='confirm_receipt_yn', related_name="confirm_receipt_yn")
    paid_yn = models.ForeignKey('Yn', models.DO_NOTHING, db_column='paid_yn', related_name="paid_yn")
class InvoiceGridEdit(ModelForm):
    model = Invoice
    fields = ['description','invoice_date','invoice_sent_yn', 'confirm_receipt_yn', 'paid_yn']

    def __init__(self, *args, **kwargs):
        super(JurisGridEditForm, self).__init__(*args, **kwargs)
        ...
        ...

InvoiceFormSet = modelformset_factory(models.Invoice, form=InvoiceGridEdit)
class InvoiceUpdateGrid(CreateView):
    template_name = "/invoice_update_grid.html"
    model = Invoice
    form_class = InvoviceViewEditForm

    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated:
            return redirect("account_login")

    def get(self, request, *args, *kwargs):
        self.object = None
        customer_number = self.request.GET.get('customer_number')
        invoice_form = InvoiceFormSet(queryset=Invoice.objects.filter(customer_number = customer_number)
        return self.render_to_response(self.get_context_data(invoice_form=invoice_form))
    def post(self, request, *args, **kwargs):
        self.object = None
        invoice_form = InvoiceFormSet(self.request.POST)
        if (invoice_form.is_valid()):
            return self.form_valid(invoice_form)
        else:
            return self.form_invalid(invoice_form)

    def form_valid(self, invoice_form):
        ...
        ...
        invoice_form.save()
        return redirect("customer_list")

    def form_invalid(self, invoice_form):
        return self.render_to_response(self.get_context_data(invoice_form=invoice_form))