我有一个模型表单,我正在尝试使用下拉列表来填充数据库中的选项。
我的模型表格如下:
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)
选择选项在那里,但是它们给出的结果不是我所追求的。选择中的选项如下所示:
{'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
答案 0 :(得分:0)
我能够通过更改查询集来实现此功能。
我没有使用.values
而是将其更改为.values_list('start_location', flat=True)
,现在它正确地在选择表单中提供了我想要的名称列表。
答案 1 :(得分:0)
您希望显示具有相同模型的不同属性的两个选择。默认情况下,ModelChoiceField
使用__str__
值的QuerySet
方法,因为您在values
之前调用了annotate
。
请勿在查询集中使用values
,或使用ModelForm
代替ModelChoiceField