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