gpt4 book ai didi

python - 缓慢加载 Django Admin 更改/添加

转载 作者:太空宇宙 更新时间:2023-11-04 04:15:41 26 4
gpt4 key购买 nike

我正在制作一个经典的单 View 应用程序,映射多个数据源。

Django-admin 是分页的,所以当我查看我的列表时没有影响,问题是当我想更改/添加它时。

使用调试工具栏我的查询看起来不错,我认为它们不会花费很长时间。

我尝试在这里使用建议 Django admin change form load quite slow并创建了一个表单,但这没有任何影响。

什么时候使用 exclude = ['e_vehicle','e_product'] 添加/更改屏幕立即加载也就不足为奇了。

有什么想法吗

enter image description here

模型.py

class Product_Mapping(Trackable):
product_mapping_id = models.AutoField(primary_key=True)
s_product = models.OneToOneField(sProduct, on_delete=models.CASCADE)
e_fund_manager = models.ForeignKey(eManager, models.DO_NOTHING, blank=True, null=True)
e_product = models.ForeignKey(eProduct, models.DO_NOTHING, blank=True, null=True)
e_vehicle = models.ForeignKey(eVehicle, models.DO_NOTHING, blank=True, null=True)

eManager 有大约 3K

eProduct 有大约 17K(有 eManager 的 fkey)

eVehicle 有大约 25K(有 eProduct 的 fkey)

表单.py

class MappingProductForm(forms.ModelForm):
s_product = forms.ChoiceField(required=False,
choices=sProduct.objects.values_list('final_publications_product_id', 'product_name'))
e_fund_manager = forms.ChoiceField(required=False,
choices=eManager.objects.values_list('e_fund_manager_id', 'manager_name'))
e_product = forms.ChoiceField(required=False,
choices=eProduct.objects.values_list('e_product_id', 'product_name'))
e_vehicle = forms.ChoiceField(required=False,
choices=eVehicle.objects.values_list('e_vehicle_id', 'formal_vehicle_name'))

class Meta:
model = Product_Mapping
fields = '__all__'

admin.py

@admin.register(Product_Mapping)
class ChampProductMappingAdmin(admin.ModelAdmin):
form = MappingProductForm

最佳答案

可以看出e_producte_vehicle表的值过多。您正在使用 ChoiceField 这意味着在 HTML 下拉列表中会有 ~17K-25K 选项,这会减慢渲染速度,有时会在客户端挂起。

解决方案

编辑您的forms.py


from django.contrib.admin.widgets import ForeignKeyRawIdWidget

class MappingProductForm(forms.ModelForm):


def __init__(self, *args, **kwargs):
super(MappingProductForm, self).__init__(*args, **kwargs)
rel_model = self.Meta.model
rel_eprod = rel_model._meta.get_field('e_product').rel
rel_eprod = rel_model._meta.get_field('e_vehicle').rel
self.fields['e_product'].widget = ForeignKeyRawIdWidget(rel_eprod, admin_site=admin.site)
self.fields['e_vehicle'].widget = ForeignKeyRawIdWidget(rel_eprod, admin_site=admin.site)

s_product = forms.ChoiceField(required=False,
choices=sProduct.objects.values_list('final_publications_product_id', 'product_name'))
e_fund_manager = forms.ChoiceField(required=False,
choices=eManager.objects.values_list('e_fund_manager_id', 'manager_name'))
e_product = forms.ModelChoiceField(required=False,
choices=eProduct.objects.all())
e_vehicle = forms.ModelChoiceField(required=False,
choices=eVehicle.objects.all()
)

class Meta:
model = Product_Mapping
fields = '__all__'

这会将原始 ID 保留为小部件。你可以得到类似下面的东西。

enter image description here

除了输入之外,您还可以通过点击搜索按钮来添加其他条目。

当您在 ModelChoiceField 中有很多选择时,这是更好的选择

关于python - 缓慢加载 Django Admin 更改/添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55485749/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com