我想创建一个渲染内容的模板。
我使用此模型创建表单(用于过滤):
class ProjectCategory(models.Model):
project = models.ForeignKey(
Project,
on_delete = models.CASCADE,
related_name = 'projectCategories'
)
parentCategory = models.ForeignKey(
ParentCategory,
on_delete=models.CASCADE)
category = models.ForeignKey(
Category,
on_delete=models.CASCADE,
)
class Meta:
verbose_name_plural = "Project categories"
使用模型表单返回模型ParentCategory和Category的所有实例。我想要的只是渲染与项目相关的值。
我试过这样的事情:
class FilterbyCategory(forms.Form):
parentCategory = forms.ModelChoiceField(
queryset = ProjectCategory.objects.all(), empty_label="(Nothing)",to_field_name="parentCategory")
但它不起作用。任何提示?
答案 0 :(得分:1)
我刚刚想出了如何使用value_list(),disctinct()和only()进行查询优化。
检索与已保存项目相关的类别和父类别的值(如果需要名称,可以用名称替换id):
projectCategories = ProjectCategory.objects.only('category','parentCategory').all()
categoryValues = projectCategories.values_list('category__id', flat=True).distinct()
parentCategoryValues = projectCategories.values_list('parentCategory__id', flat=True).distinct()
检索与已保存项目相关的国家,地区和城市:
projectLocations = ProjectLocation.objects.only('country','region','city').all()
cityValues = projectLocations.values_list('city__id', flat=True).distinct()
regionValues = projectLocations.values_list('region__id', flat=True).distinct()
countryValues = projectLocations.values_list('country__id', flat=True).distinct()
然后,如果您需要检索ParentCategory的对象,则可以使用此查询:
ParentCategory.objects.filter(id__in=parentCategoryValues)