如何在modelform中获取URL参数

时间:2020-01-12 06:43:45

标签: django django-forms

我的一个模特名字是cityform

我想从这个城市获取URL参数我可以这样做吗?

这是我的网址

path('state/city/<int:id>/', City.as_view(), name="city")

http://localhost:8000/country/state/city/3/

这是我的表格

课程

CityFrom(forms.ModelForm):
    def __init__(self, *args, **kwargs):

        super(CityFrom,self).__init__(*args, **kwargs)
        print(args)
        print(kwargs)

        self.fields['state'] = forms.ModelChoiceField(
                                 empty_label = 'Select',
                                 queryset = State.objects.all()
                                ) 
    class Meta:
        model = City
        fields = ('state', 'name')

以这种形式我要访问id = 3

这是我的观点

from django.views import View
class City(View):
    def get(self, request, *args, **kwargs):
        Forms = CityFrom()
        return render(request, 'albums/add.html', {'Forms': Forms})

2 个答案:

答案 0 :(得分:1)

按照以下方式从views.py中传递url参数作为关键字参数。

form = CityFrom(id=kwargs.get("id"))

要在您的forms.py中获取ID,请在表单的__init__方法中使用以下代码。

self.id = kwargs.get('id')

您的表单应如下所示。

CityFrom(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        self.id = kwargs.get('id')

        super(CityFrom,self).__init__(*args, **kwargs)

        self.fields['state'] = forms.ModelChoiceField(
                                 empty_label = 'Select',
                                 queryset = State.objects.all()
                                ) 
    class Meta:
        model = City
        fields = ('state', 'name')

*如上获得表格中的ID后,请致电super。在这里,调用super的顺序很重要。

答案 1 :(得分:0)

尝试

CityFrom(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        self.id = kwargs.pop('id')
        super(CityFrom,self).__init__(*args, **kwargs)
相关问题