Дублирование запроса при отображении формы, связанной с моделью Django
Я отображаю форму SendRnxForm на сайте Django. Форма связана с моделью FilesData и отображает выпадающий список -
class SendRnxForm(forms.ModelForm):
class Meta:
model = FilesData
fields = ['el_type',]
widgets = {
'el_type': forms.Select(attrs={'class': 'form-select', 'id': 'elTypeId'}),
}
class FilesData(models.Model):
el_type = models.ForeignKey(ElType, blank=False, default='1', on_delete=models.DO_NOTHING, related_name='files', verbose_name="Types el")
Выпадающий список должен содержать все записи связанной таблицы, по умолчанию выбирается первая запись. FilesData связана с моделью -
class ElType(models.Model):
name = models.CharField(max_length=16, db_index=True, verbose_name="Types el")
slug = models.SlugField(max_length=24, unique=True, db_index=True, verbose_name="Код")
def __str__(self):
return self.name
В этом случае запрос на получение данных из базы данных дублируется
SELECT `dashApp_cordtype`.`id`,
`dashApp_cordtype`.`name`,
`dashApp_cordtype`.`slug`
FROM `dashApp_cordtype`
ORDER BY `dashApp_cordtype`.`id` ASC
Views основан на CreateView:
class dashForm(DataMixin, CreateView):
form_class = SendRnxForm
template_name = 'dashApp/dash.html'
success_url = reverse_lazy('home')
Как избавиться от дублирования запросов в этом случае?
Я не могу понять, где использовать select_related/prefetch_related
def get_queryset(self):
queryset = FilesData.objects.select_related('el_type').all()
return queryset
Вы можете использовать метод get_queryset для пользовательского использования select related.