来自django

时间:2018-04-04 23:00:36

标签: django django-models django-forms

我想创建一个渲染内容的模板。

我使用此模型创建表单(用于过滤):

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")

但它不起作用。任何提示?

1 个答案:

答案 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)