Models.py
class Material(BaseModelClass):
material = models.CharField(max_length=25, verbose_name='Material')
def __str__(self):
return self.material
class PurOrder(BaseModelClass):
order_number = models.CharField(max_length=25)
class PurOrderItem(BaseModelClass):
order = models.ForeignKey(PurOrder, on_delete=models.CASCADE)
material = models.ForeignKey(Material, on_delete=models.PROTECT)
Я создал форму PurOrder и набор форм PurOrderItem
PurOrderForm = modelform_factory(PurOrder, fields=('order_number',))
PurOrderFormset = inlineformset_factory(PurOrder, PurOrderItem,fields=('material',))
Инициализировали их следующим образом.
form = PurOrderForm(instance=order_instance)
queryset = order_instance.purorderitem_set.all().select_related('material',)
formset = PurOrderFormset(instance=order_instance, queryset=queryset)
Эта установка обойдется мне в 22 запроса, если имеется 20 PurOrderItem для выбранного purorder.
- 1 для экземпляра PurOrder,
- 1 для экземпляра PurOrderItem
- 20 для выбранных материалов для этих продуктов PurOrderItem.
Подумайте об этом, если есть 1000 PurOrderItem
С предоставленным select_related, он добавляет материал в PurOrderItemselect, но когда дело доходит до его отображения, я думаю, он снова запрашивает.
Я использую django-autocomplete-light, поэтому он избавляет меня от запроса всех экземпляров материала, но он продолжает запрашивать выбранный материал, чтобы отображать его, даже если я выбираю_соединенный материал.
В идеале я бы выбрал экземпляр PurOrder с предварительно выбранным purorderitem и связанными с ним материалами, это означает 3 запроса. Приобретенный purorderitem и материал будут использоваться, когда это будет их очередь.
Пожалуйста, посоветуйте мне способ избежать выбора выбранного запроса.
Примечание. Я стараюсь избегать кэширования здесь.
ОБНОВИТЬ
Много времени после того, как я создал этот вопрос, и я попробовал предоставленные решения. Проблема в том, что формы формы не знают друг о друге. Таким образом, при условии, что выбранный запрос выбранный_религированный или предвыборный поиск не передается формам форм.