我正在 Django 网站上显示 SendRnxForm 表单。该表单链接到 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_lated/prefetch_lated
def get_queryset(self):
queryset = FilesData.objects.select_related('el_type').all()
return queryset
您可以使用 get_queryset 方法来自定义使用 select 相关。