我在尝试了解如何在Django中创建动态选择字段时遇到了一些麻烦。我有一个模型设置类似:
class rider(models.Model): user = models.ForeignKey(User) waypoint = models.ManyToManyField(Waypoint) class Waypoint(models.Model): lat = models.FloatField() lng = models.FloatField()
我想做的是创建一个选择字段whos的值是与该骑手相关联的航点(将是登录的人)。
目前,我以如下形式覆盖init:
class waypointForm(forms.Form): def __init__(self, *args, **kwargs): super(joinTripForm, self).__init__(*args, **kwargs) self.fields['waypoints'] = forms.ChoiceField(choices=[ (o.id, str(o)) for o in Waypoint.objects.all()])
但是所有要做的就是列出所有路标,它们与任何特定的骑手都没有关联。有任何想法吗?谢谢。
你可以通过将用户传递给表单init来过滤航点
class waypointForm(forms.Form): def __init__(self, user, *args, **kwargs): super(waypointForm, self).__init__(*args, **kwargs) self.fields['waypoints'] = forms.ChoiceField( choices=[(o.id, str(o)) for o in Waypoint.objects.filter(user=user)] )
启动表单时从你的角度来看
form = waypointForm(user)
在模型形式的情况下
class waypointForm(forms.ModelForm): def __init__(self, user, *args, **kwargs): super(waypointForm, self).__init__(*args, **kwargs) self.fields['waypoints'] = forms.ModelChoiceField( queryset=Waypoint.objects.filter(user=user) ) class Meta: model = Waypoint