Я создал собственного администратора для одной из моих моделей.И добавил реляционную таблицу как одну из встроенных.
1).Теперь дело в том, что Inline имеет более 100 строк.Кроме того, у встроенного объекта есть объект внешнего ключа для какой-либо другой модели.
2). Всякий раз, когда я загружаю форму модели, для загрузки требуется много времени.
3). Я отлаживал и проверял код и количество запросов.Ни один запрос не был продублирован, и количество было номинальным.
4). Я переопределил набор запросов для встроенного экземпляра, чтобы предварительно извлечь его экземпляр внешнего ключа.
5). Я продолжил и поднял случайную ошибку проверки в чистоте набора форм.
6). Что я обнаружил, что при возникновении ошибки у каждого запроса был свой запрос.Скажем, если в нем 100 строк, то запрос для этой строки был дублирован 100 раз.
7). Есть ли способ предварительно выбрать или оптимизировать этот сценарий, так как он вызывает слишком большое отставание в моем приложении
Вот код:
#model
class MyModel(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
phone_number = models.CharField(max_length=10)
entity1 = models.ForeignKey("entities.entity1", null=True, blank=True, on_delete=models.CASCADE)
entity2 = models.ForeignKey("entities.entity2", null=True, blank=True, on_delete=models.CASCADE)
is_disabled = models.BooleanField(default=False)
name = models.CharField(max_length=24, blank=True, null=True)
class Meta:
db_table = 'my_model'
def __str__(self):
return "{}:{}".format(self.phone_number, self.entity2)
#admin
class Entity2Admin(admin.GeoModelAdmin, VersionAdmin):
list_filter = ('data_status')
readonly_fields = ('source', 'batch','is_live', )
exclude = ('search_key', 'live_at', 'qc_approved_at')
def save_formset(self, request, form, formset, change):
instances = formset.save(commit=False)
for obj in formset.deleted_objects:
obj.delete()
for instance in instances:
if isinstance(instance, MyModel):
if (not instance.created_by):
instance.created_by = request.user
if (not instance.id):
instance.some_field = some_value
instance.save()
formset.save_m2m()
inlines = [MyModelInline]
extra_js = ['js/admin/GoogleMap.js','https://maps.googleapis.com/maps/api/js?key=AIzaSyA-5gVhxxxxxxxxxxxxxxxxxxxxxxx&callback=initGoogleMap']
#MyModelInline
class MyModelInline(admin.TabularInline):
model = MyModel
extra = 0
can_delete = True
show_change_link = False
formset = MyModelFormSet
readonly_fields = ['user']
verbose_name_plural = "MyModels"
fields = ['phone_number', 'name', 'user', 'entity2']
def get_queryset(self, request):
return super(MyModelInline, self).get_queryset(request).select_related('entity2', 'user')
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "entity2":
object_id = request.resolver_match.kwargs.get('object_id')
kwargs["queryset"] = Entity2.objects.filter(field=value)
return super().formfield_for_foreignkey(db_field, request, **kwargs)
Пожалуйста, помогите