以模型形式获取 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
我有一个模型表单,我正在尝试获取一个下拉列表以使用数据库中的选项填充 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