从Django中的views.py接收数据后,为forms.py创建一个选项列表

2024-07-02 12:59:19 发布

您现在位置:Python中文网/ 问答频道 /正文

所以这是一个场景。我允许我的用户首先使用一个表单输入他们的车辆品牌,然后使用另一个表单列出该车辆品牌可用的车型。有关车辆和品牌的信息存储在我的数据库中

请参阅此图以了解更多信息:

form screenshot

这是my views.py:

def driver_dashboard_trip_brand (request, brand):
    if request.method == "POST":
        form = AddVehicleForm(request.POST)
    else:
        form = AddVehicleForm()

    brands = VehicleBrand.objects.all()
    context = {
        "form":form,
        "brands":brands,
        "chosen_brand":brand
    }
    return render (request, "app/driver_dashboard.html", context)

和我的forms.py:

class AddVehicleForm(forms.ModelForm):

    model = forms.ModelChoiceField(queryset=VehicleModel.objects.all())
    vehicle_colour = forms.ChoiceField(choices=COLOURS)
    vehicle_number = forms.CharField(max_length=8, widget=forms.TextInput(attrs={'placeholder': 'eg: CAB-1234'}))

    class Meta:
        model = Vehicle
        fields = ['model', 'vehicle_colour', 'vehicle_number']

因此,为了在forms.py中设置查询,我首先需要将数据从views.py发送到forms.py,然后还需要执行查询

因此,我的问题是,一旦用户选择了汽车品牌,我如何从VehicleModel数据库中查询所有车型,并为表单创建选项属性

我的模特们

class VehicleModel (models.Model):
    brand = models.ForeignKey(VehicleBrand, on_delete=models.CASCADE)
    model = models.CharField(max_length=30)

    def __str__ (self):
        return f"{self.brand} - {self.model}"

Tags: pyform表单modelmodelsrequestformsclass
2条回答

这里有一个关于如何创建依赖字段的nice tutorial,您需要了解服务器上发生了什么,以及客户端上发生了什么

老实说没那么难,我有点明白了

这是我的表格

class AddVehicleForm(forms.ModelForm):
    def __init__(self, brand=None, *args, **kwargs):
        super(AddVehicleForm, self).__init__(*args, **kwargs)
        self.fields['model'].queryset = VehicleModel.objects.filter(brand=brand)

    model = forms.ModelChoiceField(queryset=VehicleModel.objects.all())
    vehicle_colour = forms.ChoiceField(choices=COLOURS)
    vehicle_number = forms.CharField(max_length=8, widget=forms.TextInput(attrs={'placeholder': 'eg: CAB-1234'}))

    class Meta:
        model = Vehicle
        fields = ['model', 'vehicle_colour', 'vehicle_number']

class AddVehicleFormPost(forms.ModelForm):
    model = forms.ModelChoiceField(queryset=VehicleModel.objects.all())
    vehicle_colour = forms.ChoiceField(choices=COLOURS)
    vehicle_number = forms.CharField(max_length=8, widget=forms.TextInput(attrs={'placeholder': 'eg: CAB-1234'}))

    class Meta:
        model = Vehicle
        fields = ['model', 'vehicle_colour', 'vehicle_number']

其中,表单AddVehicleForm允许我发送参数,如在my views.py中键入form = AddVehicleForm(VehicleBrand.objects.filter(brand=brand).first())所示,但当我想要保存表单时,我需要在forms.py中创建另一个表单,而无需执行AddVehicleFormPost中显示的任何查询

然后我随便做了,

if request.method == "POST":
        form = AddVehicleFormPost(request.POST)
        if form.is_valid():

在我看来

相关问题 更多 >