以模型形式获取 group_by 的查询结果并放置在 select

Get query results to group_by in model form and get placed in select

我有一个模型表单,我正在尝试获取一个下拉列表以使用数据库中的选项填充 select。

我的模型表单如下所示:

class CreateTripsForm(forms.Form):
    start_locations = Mileage.objects.values('start_location').annotate(num_locations=Count('start_location')).order_by('start_location')
    end_locations = Mileage.objects.values('end_location').annotate(num_locations=Count('end_location')).order_by('end_location')
    starting_location = forms.ModelChoiceField(queryset=start_locations, empty_label=None)
    ending_location = forms.ModelChoiceField(queryset=end_locations, empty_label=None)

有 select 选项,但它们给出的结果不是我想要的。 select 中的选项如下所示:

{'start_location': 'Location A', 'num_locations': 27}
{'start_location': 'Location B', 'num_locations': 27}
{'start_location': 'Location C', 'num_locations': 27}

我只想 select 只显示:

Location A
Location B
Location C

我已经尝试了很多不同的方法来完成这个,但我觉得我遗漏了一些东西。

编辑:

里程模型如下所示:

class Mileage(models.Model):
    miles = models.DecimalField(max_digits=8, decimal_places=1)
    start_location = models.CharField(max_length=255)
    end_location = models.CharField(max_length=255)
    user_id = models.IntegerField(null=True)

    def __str__(self):
        return self.miles

我可以通过更改查询集来实现此功能。

我没有使用 .values,而是将其更改为 .values_list('start_location', flat=True),现在它以 select 形式适当地为我提供了我想要的名称列表。

您想显示同一模型的两个具有不同属性的选择。默认情况下,ModelChoiceField 使用 QuerySet 值的 __str__ 方法,这是字典,因为您在 annotate.[=18= 之前调用 values ]

不要在查询集中使用 values,或者使用 ModelForm 而不是 ModelChoiceField